phpunit - возвращает два объекта в следующий тест - PullRequest
4 голосов
/ 17 мая 2011

В некоторых местах мои методы 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  
}

Как добиться вышеуказанного случая?Есть ли лучший подход для того же?

Ответы [ 2 ]

3 голосов
/ 17 мая 2011

Краткий ответ:

@depends работает только для одного аргумента, поэтому вы должны:

return array($obj1, $obj2);

public function testBothFeatures(array $myClasses) {
    $obj1 = $myClasses[0];
    $obj2 = $myClasses[1];
}

Более длинный ответ:

Что вы там делаете?Вы используете один тестовый пример PHPUnit для тестирования ДВА реальных классов?

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

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

Если у вас есть класс, который зависит от другого класса, тогда mock out the second class и используйте этот поддельный объект, чтобы убедиться, что ваш «тестируемый класс» работает правильно.

2 голосов
/ 17 мая 2011

Думаю, в этом было бы больше смысла?

return array(
    'obj1' => new Class1( ),
    'obj2' => new Class2( )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...