2014-11-08 2 views
3

Моя установка что-то вроде этого:Как запустить тест PHPUnit с его зависимостями

class MyTest extends PHPUnit_Framework_TestCase 
{ 
    // More tests before 

    public function testOne() 
    { 
     // Assertions 

     return $value; 
    } 

    /** 
    * @depends testOne 
    */ 
    public function testTwo($value) 
    { 
     // Assertions 
    } 

    // More tests after 
} 

Я хотел бы сосредоточиться на testTwo, но когда я phpunit --filter testTwo я получаю сообщение, как это:

This test depends on "MyTest::testOne" to pass. 
No tests executed! 

Мой вопрос: Есть ли способ запустить один тест со всеми его зависимостями?

ответ

2

Невозможно запустить автоматически все зависимости. Однако вы можете поместить свои тесты в группы с аннотацией @group, а затем запустить phpunit --group myGroup.

+0

Более вот жаль, что нет простого способа сделать это! Группы работают, но требуют как можно большего количества групп, таких как пути, которые вы регулярно хотите протестировать, - заканчивая важной зависимостью в * n * группах, где * n * - количество зависимых тестов. Это беспорядок, и должен быть более простой способ! Я сделал предложение (https://github.com/sebastianbergmann/phpunit/issues/2166) – artfulrobot

0

Я знаю, это тоже не очень удобно, но вы можете попробовать

phpunit --filter 'testOne|testTwo' 

Согласно PHPUnit документации мы можем использовать регулярные выражения в качестве фильтра.

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

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

class MyTest extends PHPUnit_Framework_TestCase 
{ 

    protected function _helper($someParameter) { 
     static $resultsCache; 
     if(!isset($resultsCache[$someParameter])) { 
      // generate your $value based on parameters 
      $resultsCache[$someParameter] = $value; 
     } 
     return $resultsCache[$someParameter]; 
    } 

    // More tests before 

    public function testOne() 
    { 
     $value = $this->_helper('my parameter'); 
     // Assertions for $value 

    } 

    /** 
    * 
    */ 
    public function testTwo() 
    { 
     $value = $this->_helper('my parameter'); 
     // Get another results using $value 

     // Assertions 
    } 
    // More tests after 
} 
0

использование регулярного выражения

phpunit --filter='/testOne|testTwo/' 
Смежные вопросы