#php #phpunit
#php #phpunit
Вопрос:
В некоторых местах мои методы phpunit зависят от двух классов, поэтому я решил написать специальный метод, который создаст экземпляр этих двух классов (которые связаны друг с другом) и передаст их всем методам phpunit. Я хочу сделать что-то вроде приведенного ниже.
public function testGetInstance()
{
$obj1 = new Class1();
$obj2 = new Class2();
return $obj1, $obj2; //can i use list ?
}
/**
*@depends testGetInstance()
*/
public function testBothFeatures(Class1 $obj1, Class2 $obj2) //how to pass 2 instances?
{
//Do all operation related to $obj1 and $obj2
}
Как достичь вышеуказанного случая? Есть ли лучший подход для того же?
Комментарии:
1. Существует ли «лучший подход» или нет, зависит от того, чего вы на самом деле пытаетесь достичь.
Ответ №1:
Краткий ответ:
@depends
работает только для одного аргумента, поэтому вам нужно:
return array($obj1, $obj2);
public function testBothFeatures(array $myClasses) {
$obj1 = $myClasses[0];
$obj2 = $myClasses[1];
}
Более длинный ответ:
Что ты там делаешь? Используете ли вы один тестовый пример PHPUnit для тестирования ДВУХ реальных классов?
Если это так, то этого обычно следует избегать. Единственным исключением является то, что вы, возможно, выполняете тест «интеграции», который гарантирует совместную работу больших частей вашего кода, но вы должны делать это только после того, как у вас есть модульный тест для каждого класса.
Вы хотите убедиться, что ваши классы работают независимо от других частей вашего приложения, чтобы вы могли легко определить, что именно вы нарушили, когда что-то меняете.
Если у вас есть класс, который зависит от другого класса, то mock out the second class
и используйте этот поддельный объект, чтобы убедиться, что ваш «тестируемый класс» работает правильно.
Комментарии:
1. Хороший ярлык — использовать
list($obj1, $obj2) = $myClasses;
Ответ №2:
Я думаю, это имело бы больше смысла?
return array(
'obj1' => new Class1( ),
'obj2' => new Class2( )
);