0

我正在使用香肠框架通过 Sauce Labs 运行基于 phpunit 的并行化 Selenium Web 驱动程序测试。一切正常,直到我想通过 markTestSkipped() 将测试标记为已跳过。我已经通过两种方法尝试过:

在测试方法本身中设置 markTestSkipped() :

class MyTest
{
    public function setUp()
    {
        //Some set up
        parent::setUp();
    }
    public function testMyTest()
    {
        $this->markTestSkipped('Skipping test');
    }
}

在这种情况下,测试会被跳过,但只有在执行 setUp 之后才会跳过,这会为跳过的测试执行很多不必要的工作。最重要的是,phpunit 不会跟踪已跳过的测试——事实上它根本不会跟踪测试。我得到以下输出:

Running phpunit in 4 processes with <PATH_TO>/vendor/bin/phpunit

Time: <num> seconds, Memory: <mem used>

OK (0 tests, 0 assertions)

另一种方法是在 setUp 方法中设置 markTestSkipped():

class MyTest
{
    public function setUp()
    {
        if (!shouldRunTest()) {
            $this->markTestSkipped('Skipping test');
        } else {
            parent::setUp();
        }
    }
    protected function shouldRunTest()
    {
        $shouldrun = //some checks to see if test should be run
        return $shouldrun;
    }
    public function testMyTest()
    {
        //run the test
    }
}

在这种情况下,setUp 被跳过,但测试仍然无法将测试跟踪为已跳过。phpunit 仍然返回上述输出。任何想法为什么 phpunit 在以这种方式执行时不跟踪我跳过的测试?

4

1 回答 1

0

看起来,目前在使用 paratest 时,不支持在 PHPunit 中记录 markTestSkipped() 和 markTestIncomplete() 结果。更准确地说,PHPunit 不会记录调用 markTestSkipped() 或 markTestIncomplete() 如果设置了 arguments['junitLogfile'] 的测试——并且 paratest 使用 junitLogfile 调用 PHPunit。

有关更多信息,请参阅:https ://github.com/brianium/paratest/issues/60

我想我可以破解 phpunit 或 paratest ......

于 2013-08-30T02:26:58.977 回答