Як запустити певний тестовий пакет phpunit xml?


83

як я можу вибрати конкретний тест для виконання?

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

Відповіді:


125

Ось код, ніби 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!


У мене проблема, що <каталог> просто ігнорується. Тести не виконуються. Якщо я вказав за допомогою <file>, вони працюють нормально, але я не можу вказати їх усіх вручну! Вони дійсно дотримуються файлу Test.php та правила класу імен. Ідея?
Alexander Morland,

Ви можете поділитися своїм конфігураційним файлом? Часто підозрюваними є дрібні деталі.
Джош Вудкок,


20

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

Але є альтернатива, ви можете просто пройти шлях до phpunit.

phpunit library/XXX

Це дозволить запустити всі тести в каталозі library / XXX

Якщо цього вам недостатньо, іншим варіантом є використання анотації @group для розподілу тестів на різні категорії, які потім можна запускати вибірково.


ну, як ви можете бачити в моєму дописі, це не зовсім те, що мені потрібно
Андреас Лінден

Тоді ви нічого не можете зробити, як зазначено у першому посиланні моєї відповіді.
Anti Veeranna

3

Починаючи з phpunit 6.1, ви можете використовувати у файлі конфігурації xml атрибут defaultTestSuite, це все одно, що використовувати параметр за замовчуванням phpunit --testsuite xxxі замінено.


1

Інший варіант - створити окремий конфігураційний файл для кожного тестового набору, який ви хочете протестувати окремо. Існує кілька накладних витрат, через які вам, можливо, доведеться скопіювати / вставити дублікати налаштувань, але тоді ви можете вказати кожен конфігураційний файл за необхідності.


1

Інші відповіді тут правильні. Ви не можете зробити це, використовуючи конфігурацію 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 {

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

/**
 * 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();
   }
 }
 ?>

Тепер, щоб отримати функціональність, яку ви хочете, просто запустіть "конфігурацію" проти потрібної групи.

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

Як я вже говорив, це потворний і, звичайно, поганий код, оскільки він вимагатиме постійного обслуговування, але він надасть вам потрібну вам функціональність.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.