phpunit跳过不同测试用例之间依赖关系的测试

时间:2017-06-21 15:14:38

标签: unit-testing phpunit

对于集成测试,我想重用测试结果。依赖关系是通过注释定义的。对于要执行的依赖测试,需要提供先前测试的结果。因此,测试需要以固定的顺序执行。否则将跳过依赖于其他测试的测试。为确保测试以固定顺序执行,已定义测试套件。仍然跳过依赖的测试。那是为什么?

ATest.php:

<?php

use PHPUnit\Framework\TestCase;

class ATest extends TestCase
{
    public function testA()
    {
        self::assertTrue(true);
        return $this;
    }
}

BTest.php:

<?php

use PHPUnit\Framework\TestCase;

class BTest extends TestCase
{

    /**
    * @depends ATest::testA()
    */
    public function testB($a)
    {
        self::assertTrue(true);
    }
}

phpunit.xml:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit
         verbose="true"
>
    <testsuites>
        <testsuite name="dependency">
            <file>ATest.php</file>
            <file>BTest.php</file>
        </testsuite>
    </testsuites>
</phpunit>
  

phpunit --testsuite依赖

     

Sebastian Bergmann的PHPUnit 5.5.7和   贡献者。

     

运行时:带有Xdebug 2.5.4配置的PHP 7.1.5:   /phpunit.xml

     

.S 2   / 2(100%)

     

时间:49毫秒,内存:4.00MB

     

有1次跳过测试:

     

1)BTest :: testB此测试取决于&#34; ATest :: testA()&#34;通过。

     

好的,但不完整,跳过或有风险的测试!测试:1,断言:1,   跳过:1。

1 个答案:

答案 0 :(得分:2)

根据不同TestCase中的测试,您无法进行测试。测试需要包含在同一测试用例中。由于测试不在测试用例中,因此它会被视为失败的测试,并且在运行测试时会跳过测试。

您的测试需要合并为一个测试才能使依赖工作。

https://phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.test-dependencies

部分原因是您的每个测试都应该是隔离的,并且能够以任何顺序运行。测试依赖于单独测试用例中的测试意味着测试文件需要以特定顺序运行。具有循环测试依赖性,这很容易变得复杂。

此外,您现在还有影响测试用例中未包含的测试的内容。这可能导致维持测试的噩梦。