Daw*_*hia 12 php phpunit unit-testing
在PHPUnit中,您可以通过使用@depends注释使一个测试依赖于其他测试.是否有可能使整个TestCase依赖于其他TestCase中的测试?或者至少在一个TestCase中进行单个测试依赖于其他TestCase中的测试?
我试过了:
/**
* @depends A::testMethodName
*/
Run Code Online (Sandbox Code Playgroud)
但正如我所料,它不起作用.
更新:
确切的情况看起来像这样:有class B哪些用途class A.所以我想测试B只有在A(或其中一个测试)的测试没有失败的情况下运行.我怎样才能做到这一点?
Jos*_*ock 14
利用依赖是非常重要的!所提到的松耦合用于实际应用架构,不适用于单元测试用例.如果在功能执行中内置逻辑依赖关系,那么利用这些依赖关系总是一个好主意.
使用测试加倍适合SOA依赖地方不能在黑盒子内映射到特定的故障和服务是不可靠的.这不适用于跨应用程序类.
如果测试类之间存在逻辑依赖关系,您肯定希望使用此类功能.从单元测试中掌握的概念是它能够立即将缺陷隔离到特定组件.
此功能在PHPUnit v 3.7.13上可用.但是,唯一可行的方法是在包含两个TestCase类的目录上运行PHPUnit.
例如,使用此文件夹结构
-application\dep -BTest.php -CTest.php
课程......
- application\dep
|- BTest.php
|- CTest.php
Run Code Online (Sandbox Code Playgroud)
和...
class BTest extends PHPUnit_Framework_TestCase
{
/**
* @depends CTest::testADomino
*/
public function testDominoDependent()
{
$this->assertTrue(true);
}
}
Run Code Online (Sandbox Code Playgroud)
这是结果
class CTest extends PHPUnit_Framework_TestCase
{
public function testADomino()
{
$this->assertTrue(false);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在同一个文件中同时拥有两个测试用例类,但结构很差.没有必要"确保"一个测试在另一个之前运行.
作为敏捷教练,我认为测试在大型组织中经常加倍,在这些组织中,当另一个组件进行导致测试失败的更改时,专门的细分市场希望避免构建失败.这当然会破坏单元测试的整个目的,即在最终用户之前识别组件故障.
没有内置的方法可以做到这一点,但是任何数量的测试依赖于其他一些测试传递也不难.您必须确保ATest之前执行BTest.
class ATest extends PHPUnit_Framework_TestCase {
public static $passed = false;
function testThatMustPass() {
// ... the actual test ...
// ok, test passed
self::$passed = true;
}
}
class BTest extends PHPUnit_Framework_TestCase {
function testThatDependsOnA() {
if (!ATest::$passed) {
self::markTestSkipped('A failed');
}
}
}
Run Code Online (Sandbox Code Playgroud)
测试依赖于整个测试用例也是可能的.
class ATest extends PHPUnit_Framework_TestCase {
public static $passed = true;
protected function onNotSuccessfulTest(Exception $e)
self::$passed = false;
parent::onNotSuccessfulTest($e);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过跟踪失败的测试名称来改进这些,这样您就可以依赖每个案例的测试子集.
小智 5
对于那些仍然对这个问题感到疑惑的人,您可以使用@Depends参考而不是@depends. 似乎小写版本只能以跨功能的方式使用,而大写字母可以用于类到类。
/**
* @Depends FirstTest::testMethodName
*/
Run Code Online (Sandbox Code Playgroud)
确保依赖的测试类将在依赖它的实际测试类之前运行。您可以通过在声明测试类的顺序做这个测试包中phpunit.xml。
<phpunit
bootstrap="./vendor/autoload.php"
colors="true"
>
<testsuites>
<testsuite name="App\\Tests">
<directory>./test</directory>
</testsuite>
<testsuite name="sample-testsuite">
<directory>./test/FirstTest.php</directory>
<directory>./test/SecondTest.php</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">src</directory>
</whitelist>
</filter>
</phpunit>
Run Code Online (Sandbox Code Playgroud)
然后,您运行测试套件。
./vendor/bin/phpunit --testsuite sample-testsuite
Run Code Online (Sandbox Code Playgroud)
我只用6.1.0+版本对此进行了测试。您可以在此处查看有关此问题的讨论。谢谢 :)
| 归档时间: |
|
| 查看次数: |
11848 次 |
| 最近记录: |