2013-04-22 6 views
2

@depends аннотаций позволяет выразить зависимости между тестами:Можно ли вернуть mutiple значения с помощью @depends?

class MyTest extends \PHPUnit_Framework_TestCase 
{ 
    public function testOne() 
    { 
     // ... 

     return $client; 
    } 

    /** 
    * @depends testOne 
    */ 
    public function testTwo(Client $client) 
    { 
     // ... 
    } 
} 

Если я хочу, чтобы вернуть несколько значений, можно вернуть массив значений, таких как:

class MyTest extends \PHPUnit_Framework_TestCase 
{ 
    public function testOne() 
    { 
     // ... 

     return array($client, $node); 
    } 

    /** 
    * @depends testOne 
    */ 
    public function testTwo(array $items) 
    { 
     list ($client, $node) = $items; 

     // ... 
    } 
} 

В то время как это работает отлично, проблема с этим подходом заключается в том, что я теряю тип намека на мою IDE и должен вручную аннотировать переменные $client и $node, чтобы они правильно их понимали.

То, что я хотел бы сделать вместо этого, чтобы явно использовать возвращаемые значения в виде отдельных параметров во втором тесте:

class MyTest extends \PHPUnit_Framework_TestCase 
{ 
    public function testOne() 
    { 
     // ... 

     return array($client, $node); 
    } 

    /** 
    * @depends testOne 
    */ 
    public function testTwo(Client $client, Node $node) 
    { 
     // ... 
    } 
} 

Возможно ли это?

ответ

0

Я посмотрел какое-то время назад, и я думаю, что ответ отрицательный. Это скорее проблема ясности, чем что-либо. Поскольку PHP только позволяет вам возвращать одну переменную, вам нужно будет ввести дополнительную логику аннотаций на уровне PHPUnit, чтобы сказать, что возвращаемое вами значение - это не одно значение, а массив значений.

На боковой ноте я обнаружил, что возвращение объектов с помощью @depends может стать сложным. Если, например, у вас было два теста, которые оба зависят от наборов, скажем @depends createUser. Результат - ссылка. Затем testOne изменяет объект пользователя, который он задает, потому что он ссылается на testTwo, теперь будет изменен пользовательский объект.

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

+0

Похоже, вы правы, я не нашел решения самостоятельно, так как задал вопрос. Теперь мне удалось передать только один параметр в следующий тест с помощью '@ depends' и позаботьтесь о том, чтобы не было более одного теста в зависимости от заданного теста, чтобы избежать упоминания ссылочной проблемы! – Benjamin

+0

'@ зависит', безусловно, является спасателем: я делаю функциональные тесты с помощью виртуального браузера и передаю браузер из теста для тестирования, каждый из которых загружает одну страницу, а следующий тест передается ссылкой на браузер на ожидаемом стр. Если тест не удался, все последующие, зависящие от него, пропущены! – Benjamin

+0

Я согласен с 100%, я люблю @depends. Это только передача значения, которую я прекратил использовать. – SamHennessy

Смежные вопросы