Использование зависимостей чрезвычайно важно! Слабая связь, как упомянуто, предназначена для реальной прикладной архитектуры, а не для тестовых случаев. Если в функциональное выполнение встроены логические зависимости, всегда полезно использовать эти зависимости.
Использование удвоение теста подходит для SOA, где зависимости не могут быть сопоставлены с конкретным отказом внутри черного ящика И служба не является надежной. Это не подходит для классов между приложениями.
Вы определенно захотите использовать этот тип функциональности , если между тестовыми классами есть логические зависимости. Концепция, которую следует понять при модульном тестировании, заключается в ее способности немедленно изолировать дефекты отдельных компонентов.
Эта функция доступна в PHPUnit v 3.7.13. Однако единственный способ, которым это будет работать, - это запуск PHPUnit в каталоге, содержащем оба класса TestCase.
Например, с такой структурой папок
- application\dep
|- BTest.php
|- CTest.php
Занятия ...
class BTest extends PHPUnit_Framework_TestCase
{
/**
* @depends CTest::testADomino
*/
public function testDominoDependent()
{
$this->assertTrue(true);
}
}
и ...
class CTest extends PHPUnit_Framework_TestCase
{
public function testADomino()
{
$this->assertTrue(false);
}
}
Это результат
C:\Users\Josh>C:\xampp\php\phpunit.bat "C:\xampp\htdocs\BeAgile\applications\sto
cklogger\tests\dep"
PHPUnit 3.7.13 by Sebastian Bergmann.
SF
Time: 0 seconds, Memory: 2.00Mb
There was 1 failure:
1) CTest::testADomino
Failed asserting that false is true.
C:\xampp\htdocs\BeAgile\applications\stocklogger\tests\dep\CTest.php:7
FAILURES!
Tests: 1, Assertions: 1, Failures: 1, Skipped: 1.
Вы можете иметь оба класса тестовых наборов в одном файле, но это будет плохой структурой. Нет необходимости «проверять», что один тест выполняется раньше другого.
Как проворный тренер, я вижу слишком частое удвоение теста в больших организациях, где специализированные сегменты хотят избежать сбоев сборки, когда другие компоненты вносят изменения, которые вызывают сбой теста. Это, конечно, противоречит всей цели модульных тестов, которая заключается в выявлении сбоев компонентов до того, как это сделает конечный пользователь.