Подтвердить что ты не робот

Как запустить определенный phpunit xml testsuite?

как я могу выбрать конкретный testuite для выполнения?

$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>
4b9b3361

Ответ 1

Вот код, как будто 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!

Ответ 2

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

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

phpunit library/XXX

Это проведет все тесты в каталоге library/XXX

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

Ответ 3

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

Ответ 4

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

Ответ 5

Другие ответы здесь верны. Вы не можете сделать это, используя конфигурацию 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

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

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