如何在PHPUnit中跳过/标记不完整的整个测试套件?

前端之家收集整理的这篇文章主要介绍了如何在PHPUnit中跳过/标记不完整的整个测试套件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
描述

我有一个TestSuite,我需要标记为跳过(整个测试套件 – 不是套件中的具体测试用例).

class AllTests
{    
    public static function suite()
    {
        // this does not work same as within TestCase:
        // throw new \PHPUnit_Framework_SkippedTestError("Out of order");

        $Suite = new \PHPUnit_Framework_TestSuite(__NAMESPACE__);
        $Suite->addTestSuite(translators\AllTests::cls());
        $Suite->addTestSuite(TlScopeTest::cls());
        $Suite->addTestSuite(TlNsTest::cls());
        $Suite->addTestSuite(TlElementTest::cls());
        $Suite->addTestSuite(TlItemTest::cls());
        $Suite->addTestSuite(LangCodeTest::cls());
        $Suite->addTestSuite(TlElemClassTagTest::cls());
        return $Suite;
    }
}

正如你可以看到,抛出PHPUnit_Framework_SkippedTestError异常不起作用.它不被PHPUnit捕获,并且将任何未捕获的异常中断执行(这是可以理解的,因为在实际运行测试之前,在构建测试层次结构时调用了suite()方法).

我看到一个名为PHPUnit_Framework_SkippedTestSuiteError的异常类,但没有线索如何利用它.有任何想法吗?

动机

我有一个TestSuite,它集合了许多测试用例以及其他测试套件.几乎每一次测试都失败了,因为我在代码核心的变化.

问题是这个包不是关键的,并且计划在以后修复.在此之前,我必须为每个其他软件包运行测试,但是当我执行PHPUnit输出时,这些错误来自相关软件包.这迫使我检查每次任何故障是否来自任何其他包装.

正如你所怀疑的那样,这是很容易受到人为错误的影响,即我可能会错过一个失败,这实际上是重要的.

我只能运行我正在工作的测试套件,但是我无法控制一个包中的更改是否导致其他包中的故障.

我不想评论这个测试套件,因为我恐怕我(或者谁会接管我的代码)可以完全忘记它.

好的,所以我把它放在一起:

> AllTests类必须重构以扩展PHPUnit_Framework_TestSuite.
>这使得该类成为一个非常有价值的TestSuite,并允许在套件级别实现setUp方法.
> setUp方法由测试运行器(而不是由构建器)调用,因此抛出一个SkippedTestError异常是安全的.
>在测试套件中执行的相应方法称为markTestSuiteSkipped(注意方法名称中的Suite).

整个课程将如下所示:

class AllTests extends \PHPUnit_Framework_TestSuite
{    
    protected function setUp()
    {
        $this->markTestSuiteSkipped("zzz");
    }

    public static function suite()
    {
        $Suite = new self(__NAMESPACE__);
        $Suite->addTestSuite(translators\AllTests::cls());
        $Suite->addTestSuite(TlScopeTest::cls());
        $Suite->addTestSuite(TlNsTest::cls());
        $Suite->addTestSuite(TlElementTest::cls());
        $Suite->addTestSuite(TlItemTest::cls());
        $Suite->addTestSuite(LangCodeTest::cls());
        $Suite->addTestSuite(TlElemClassTagTest::cls());
        return $Suite;
    }
}

输出是一个很好的S字母块,它明确表示,我们跳过了很多测试.这不能逃避我们的注意,但允许我们的测试通过.

原文链接:/php/130966.html

猜你在找的PHP相关文章