Как запустить определенный phpunit xml testsuite? - PullRequest
73 голосов
/ 09 сентября 2010

как выбрать определенный набор тестов для выполнения?

$ phpunit --configuration config.xml

config.xml:

<testsuites>
    <testsuite name="Library">
        <directory>library</directory>
    </testsuite>
    <testsuite name="XXX_Form">
        <file>library/XXX/FormTest.php</file>
        <directory>library/XXX/Form</directory>
    </testsuite>
</testsuites>

Ответы [ 5 ]

109 голосов
/ 14 февраля 2013

Вот код, как будто PHPUnit 3.7.13

$ phpunit --configuration config.xml --testsuite Library
$ phpunit --configuration config.xml --testsuite XXX_Form

Если вы хотите запустить группу наборов тестов, вы можете сделать это

<testsuites>
  <testsuite name="Library">
    <directory>library</directory>
  </testsuite>
  <testsuite name="XXX_Form">
    <file>library/XXX/FormTest.php</file>
    <directory>library/XXX/Form</directory>
  </testsuite>
  <testsuite name="Both">
    <directory>library</directory>
    <file>library/XXX/FormTest.php</file>
    <directory>library/XXX/Form</directory>
  </testsuite>
</testsuites>

Затем

$ phpunit --configuration config.xml --testsuite Both

К сожалению, PHPUnit в настоящее время не поддерживает вложенные тестовые наборы, подобные этому

<testsuites>
    <testsuite name="Both">
      <testsuite name="Library">
        <directory>library</directory>
      </testsuite>
      <testsuite name="XXX_Form">
        <file>library/XXX/FormTest.php</file>
        <directory>library/XXX/Form</directory>
      </testsuite>
  </testsuite>
</testsuites>

Так что, если вы хотите запускать группы тестовых наборов таким образом, у вас должно быть дублирование конфигурации xml!

20 голосов
/ 12 сентября 2010

Это невозможно в текущих версиях PHPUnit, о чем свидетельствуют следующие сообщения в списке рассылки phpunit-user: http://thread.gmane.org/gmane.comp.php.phpunit.user/1302

Но есть альтернатива, вы можете просто указать путь к phpunit.

phpunit library/XXX

Это запустит все тесты в каталоге library / XXX

Если этого вам недостаточно, другой вариант - использовать @ аннотация группы , чтобы разделить тесты на разные категории, которые затем можно будет запускать выборочно.

3 голосов
/ 17 марта 2017

Начиная с phpunit 6.1, вы можете использовать в файле конфигурации xml атрибут defaultTestSuite, это похоже на использование опции по умолчанию phpunit --testsuite xxx и переопределяется.

1 голос
/ 28 августа 2012

Другие ответы здесь верны.Вы не можете сделать это, используя конфигурацию xml, но вы можете сделать такой же тип конфигурации в php.

Это, конечно, не самая красивая вещь, но она должна дать вам необходимую функциональность.

Вы предоставили конфигурацию xml

<testsuites>
  <testsuite name="Library">
    <directory>library</directory>
  </testsuite>
  <testsuite name="XXX_Form">
    <file>library/XXX/FormTest.php</file>
    <directory>library/XXX/Form</directory>
  </testsuite>
</testsuites>

Гипотетически, допустим, ваша директория "библиотека" содержит 3 файла:

library
   XXX    
     FormTest.php
   Unit
     unittest1.php
     unittest2.php

И что каждый из файлов содержит 1тестирование по идеальному соглашению об именах, например: FormTest содержит testForm ()

Для конфигурации мы создадим конфигурацию, которая содержит все:

<?php
include_once "library/XXX/FormTest.php";
include_once "library/Unit/unittest1.php";
include_once "library/Unit/unittest2.php";

Затем мы создадим класс с помощьюСоглашения об именах phpunit.Вы можете называть его как угодно, так как мы никогда не будем его использовать ...

class LibraryConfigTest extends PHPUnit_Framework_TestCase {

Каждый "набор тестов" будет просто методом, который запускает необходимые тесты.Назовите методы как хотите, еще раз, мы никогда не будем их использовать.Phpunit позаботится о беге.Обязательно закомментируйте их в группы, чтобы вы знали, как их выполнять.

/**
 * All Tests in Library
 * @group Library
**/
   public function testLibrary() {
      UnitTest1::testUnit1();
      UnitTest2::testUnit2();
      FormTest::testForm();
   }

/**
 * All Form tests in library/XXX
 * @group XXX_Form
**/
   public function testForm() {
      FormTest::testForm();
   }
 }
 ?>

Теперь, чтобы получить желаемую функциональность, просто запустите "config" для нужной группы.

phpunit --group XXX_Form library_config.php
phpunit --group Library library_config.php

Как я уже сказал, это некрасивый и, конечно, не очень хороший код, поскольку он требует постоянного обслуживания, но он даст вам необходимую функциональность.

Надеюсь, Бергманн добавит эту функциональность в свойследующий раунд, хотя это маловероятно, так как он, кажется, в значительной степени игнорирует его .

1 голос
/ 25 мая 2012

Другой вариант - создать отдельный файл конфигурации для каждого комплекта тестов, который вы хотите протестировать отдельно.Существуют некоторые издержки, связанные с тем, что вам, возможно, придется копировать / вставлять дубликаты настроек, но вы можете указать каждый файл конфигурации по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...