将PHPUnit测试类标记为要忽略

hak*_*kre 17 php phpunit

我编写了一个抽象的测试用例类,由具体的测试用例类扩展.

它从PHPUnit_TestCase扩展而来.

是否有方法或注释表明Phpunit不执行此抽象测试(但不将其标记为跳过或不完整)?

现在Phpunit也运行抽象测试类,然后报告一个错误,它无法实例化它 - 这是语言:抽象类无法实例化.

Dav*_*ess 17

如果它被命名FooTest重命名为FooTestCase.

  • 我将`Case`添加到抽象类名中,我现在只在直接执行该测试时得到错误.说得通.执行整个目录会忽略它.谢谢! (3认同)
  • @SS 重命名类本身。如果您不告诉 PHPUnit 运行特定文件,它会加载所有名为 `*Test.php` 的文件,然后实例化所有名为 `*Test` 的类。确保必须扩展的抽象测试用例不以“Test”结尾。 (2认同)
  • @NinoŠkopac 将类声明为抽象类,然后它应该可以工作。简单地重命名对我来说也不起作用。 (2认同)

jhv*_*ras 11

只需在setUp()上添加skip即可:

protected function setUp()
{
    $this->markTestIncomplete();
}
Run Code Online (Sandbox Code Playgroud)

  • 这会将所有扩展测试标记为不完整,完全*不是*我询问的内容(以防万一尚不清楚)。 (3认同)
  • 与原始问题无关,但如果您到达此处寻求暂时跳过,当您想暂时跳过此类时,您也可以使用 `$this->markTestSkipped('Work in Progress');` 来跳过测试当您重构此类测试所需的其他部分时。 (2认同)

Mah*_*alt 9

假设您要排除文件名TestCase.php.在我的例子中,我使用这个类作为我自己扩展的所有测试类的抽象PHPUnit_Framework_TestCase.

解决方案:将此添加到您的phpunit.xml

<testsuites>
    <testsuite name="BLABLA">
        <directory suffix=".php">./tests</directory>
        <exclude>./tests/TestCase.php</exclude>
    </testsuite>
</testsuites>
Run Code Online (Sandbox Code Playgroud)

我的TestCase.php例子:

<?php
namespace Foo\Bar\Tests;

use Mockery as M;
use PHPUnit_Framework_TestCase as PHPUnit;

/**
 * Class TestCase is the Parent test class that every test class must extend from.
 */
class TestCase extends PHPUnit
{

    public function __construct()
    {
        parent::__construct();
    }

//...
Run Code Online (Sandbox Code Playgroud)

  • 当它是一个抽象类并且名为TestCase.php时,您不需要在XML中将其排除.该代码是多余的,因此是残缺的,应该从XML文件中删除.如果只是问题的标题不清楚,我很抱歉,但问题本身应该清楚这是什么.你在这里回答一个不同的问题. (2认同)