【问题标题】:Mark a PHPUnit test class as to be ignored将 PHPUnit 测试类标记为被忽略
【发布时间】:2011-05-09 08:22:59
【问题描述】:

我写了一个抽象的测试用例类,将被具体的测试用例类扩展。

它从 PHPUnit_TestCase 扩展而来。

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

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

【问题讨论】:

标签: php phpunit


【解决方案1】:

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

protected function setUp()
{
    $this->markTestIncomplete();
}

【讨论】:

  • 这会将所有扩展测试标记为不完整,正是不是我所问的(以防万一不清楚)。
  • 受保护的函数 setUp() :void { $this->markTestIncomplete(); }
【解决方案2】:

如果它被命名为FooTest,则将其重命名为FooTestCase

【讨论】:

  • 我在抽象类名中添加了Case,现在我只在直接执行该测试时得到错误。说得通。执行整个目录会忽略它。谢谢!
  • @hakre - 是的,如果你给 PHPUnit 一个文件的名字,它自己不会做任何扫描。
  • 是的,有道理。再次感谢,今天早上我意识到我已经将该特性用于一个抽象基类,几乎整个测试套件都是从该类扩展而来的。见树不见林的典型案例。
  • @SS 重命名类本身。如果您不告诉 PHPUnit 运行特定文件,它会加载所有名为 *Test.php 的文件,然后实例化所有名为 *Test 的类。确保必须扩展的抽象测试用例不以 Test 结尾。
  • 是的,我明白了,我有更大的问题 phpunit 以某种方式运行 /tests 文件夹中的所有文件,即使我完全删除了 <testsuite> 节点的 innerXml,正如我今天晚些时候发现的 stackoverflow.com/questions/39616107/…
【解决方案3】:

假设您要排除文件名TestCase.php。 就我而言,我使用这个类作为我所有测试类的抽象,它本身扩展了PHPUnit_Framework_TestCase

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

<testsuites>
    <testsuite name="BLABLA">
        <directory suffix=".php">./tests</directory>
        <exclude>./tests/TestCase.php</exclude>
    </testsuite>
</testsuites>

我的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();
    }

//...

【讨论】:

  • 当它是一个抽象类并且命名为 TestCase.php 时,您不需要在 XML 中排除它。该代码是多余的,因此很杂乱,应该从 XML 文件中删除。如果仅从问题的标题中不清楚,我很抱歉,但问题本身应该清楚这是关于什么的。你在这里回答了一个不同的问题。
  • 我虽然这正是您需要的,因为您的问题Mark a PHPUnit test class as to be ignored 是我在搜索How to ignore test class in PHPUnit 时首先出现在谷歌上的内容。我真正想要的是忽略所有其他测试类扩展的测试类。因为如果我不忽略它,我会收到no tests in this class 的错误消息,这是真的,因为它只是托管所有测试类的通用函数。我找到的正确解决方案是忽略该类从phpunit.xml 运行
  • 标题可能表明,是的,但是该类是 TestCase 类型的类(抽象类),而不是编写测试的通用测试类。我不是说你的答案是错误 只是想指出一点不同,因为您回答得很晚,然后有时答案有点脱节。您没有在答案或类似内容中写下任何错误信息。只是想添加一些上下文。
猜你喜欢
  • 1970-01-01
  • 2017-03-16
  • 2021-09-01
  • 2017-06-10
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
  • 2020-01-21
相关资源
最近更新 更多