25

为了忽略使用 PHPUnit 的测试,应该放在 PHP 测试方法旁边的属性是什么?

我知道对于 NUnit,属性是:

[Test]
[Ignore]
public void IgnoredTest()
4

5 回答 5

38

您可以使用组注释标记测试并从运行中排除这些测试。

/**
 * @group ignore
 */
public void ignoredTest() {
    ...
}

然后您可以运行所有测试但忽略测试,如下所示:

phpunit --exclude-group ignore
于 2013-10-31T17:56:42.780 回答
19

最简单的方法是只更改测试方法的名称并避免名称以“test”开头。这样,除非您告诉 PHPUnit 使用 执行它@test,否则它不会执行该测试。

此外,您可以告诉 PHPUnit跳过特定测试

<?php
class ClassTest extends PHPUnit_Framework_TestCase
{     
    public function testThatWontBeExecuted()
    {
        $this->markTestSkipped( 'PHPUnit will skip this test method' );
    }
    public function testThatWillBeExecuted()
    {
        // Test something
    }
}
于 2013-04-17T18:00:48.620 回答
9

您可以使用该方法markTestIncomplete()忽略 PHPUnit 中的测试:

<?php
require_once 'PHPUnit/Framework.php';

class SampleTest extends PHPUnit_Framework_TestCase
{
    public function testSomething()
    {
        // Optional: Test anything here, if you want.
        $this->assertTrue(TRUE, 'This should already work.');

        // Stop here and mark this test as incomplete.
        $this->markTestIncomplete(
            'This test has not been implemented yet.'
        );
    }
}
?>
于 2013-04-17T13:45:01.377 回答
4

如果您test在开始时没有为您的方法命名,那么 PHPUnit 将不会执行该方法(请参见此处)。

public function willBeIgnored() {
    ...
}

public function testWillBeExecuted() {
    ...
}

如果你想执行一个不以你开头的方法,test你可以添加注释@test来执行它。

/**
 * @test
 */
public function willBeExecuted() {
    ...
}
于 2017-07-25T08:42:29.950 回答
4

由于您在其中一条评论中建议您不想更改测试的内容,如果您愿意添加或调整注释,您可以滥用@requires注释来忽略测试:

<?php

use PHPUnit\Framework\TestCase;

class FooTest extends TestCase
{
    /**
     * @requires PHP 9000
     */
    public function testThatShouldBeSkipped()
    {
        $this->assertFalse(true);
    }
}

注意这只会在 PHP 9000 发布之前有效,并且运行测试的输出也会有点误导:

There was 1 skipped test:

1) FooTest::testThatShouldBeSkipped
PHP >= 9000 is required.

供参考,请参阅:

于 2017-08-16T15:42:59.107 回答