在 PHPUnit 中,您可以使用 @depends
注释使一个测试依赖于其他测试。
是否可以使整个 TestCase 依赖于其他 TestCase 中的测试?或者至少使一个测试用例中的单个测试依赖于其他测试用例中的测试?
我尝试过:
/**
* @depends A::testMethodName
*/
但正如我所料,它不起作用。
更新:
确切的情况是这样的:有一个B类
使用了A类
。因此,只有当 A
的测试(或其测试之一)运行没有失败时,我才想测试 B
。我怎样才能做到这一点?
最佳答案
利用依赖关系非常重要!所提到的松耦合是针对实际应用程序架构的,而不是针对单元测试用例的。如果功能执行中内置了逻辑依赖关系,那么利用这些依赖关系总是一个好主意。
使用test doubling适用于 SOA,其中依赖关系无法映射到黑盒内的特定故障并且服务不可靠。这不适用于内部应用程序类。
You definitely would want to use this type of functionality测试类之间是否存在逻辑依赖关系。 The concept to be grasped单元测试的优势在于它能够立即隔离特定组件的缺陷。
此功能在 PHPUnit v 3.7.13 上可用。然而,唯一可行的方法是在包含两个 TestCase 类的目录上运行 PHPUnit。
例如,使用此文件夹结构
- application\dep
|- BTest.php
|- CTest.php
类(class)...
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.
您可以将两个测试用例类放在同一个文件中,但这将是一个糟糕的结构。没有必要“确保”一个测试在另一个测试之前运行。
作为一名敏捷教练,我发现大型组织中的测试重复次数太频繁,在这些组织中,当其他组件进行导致测试失败的更改时,专门的部门希望避免构建失败。这当然违背了单元测试的全部目的,即在最终用户之前识别组件故障。
关于php - PHPUnit 中两个 TestCase 类之间的依赖测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8835607/