在PHPUnit中,应该将哪个属性放置在PHP测试方法旁边,以便忽略该测试?
我知道对于NUnit来说,该属性是:
[Test]
[Ignore]
public void IgnoredTest()
在PHPUnit中,应该将哪个属性放置在PHP测试方法旁边,以便忽略该测试?
我知道对于NUnit来说,该属性是:
[Test]
[Ignore]
public void IgnoredTest()
您可以使用组注释为测试打标签,并从运行中排除这些测试。
/**
* @group ignore
*/
public void ignoredTest() {
...
}
然后你可以运行所有的测试,但可以像这样忽略某些测试:
phpunit --exclude-group ignore
最简单的方法是只需更改测试方法的名称,并避免以“test”开头的名称。这样,除非您使用@test
告诉PHPUnit执行它,否则它不会执行该测试。
此外,您还可以告诉PHPUnit跳过特定的测试:
<?php
class ClassTest extends PHPUnit_Framework_TestCase
{
public function testThatWontBeExecuted()
{
$this->markTestSkipped( 'PHPUnit will skip this test method' );
}
public function testThatWillBeExecuted()
{
// Test something
}
}
markTestIncomplete()
方法来忽略一个测试:<?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.'
);
}
}
?>
如果您不想更改测试内容,但愿意添加或调整注释,您可以使用@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.
参考文献:
以上为相关内容,请参考。test
开头,那么该方法将不会被 PHPUnit 执行(请参见此处)。public function willBeIgnored() {
...
}
public function testWillBeExecuted() {
...
}
test
开头的方法,您可以添加注释@test
以便无论如何都能执行它。/**
* @test
*/
public function willBeExecuted() {
...
}
对Brady Olsen的回答进行拓展,你可以在测试方法或类上使用@group
注释将它们放入任意分组中,在这个例子中是ignore
:
/**
* @group ignore
*/
public function testMethod(): void {
// ignored...
}
与/或:
/**
* Every test in this class will be ignored, whether it has a @group or not.
* @group ignore
*/
class FooTest() {
public function testBar() {
// ignored...
}
}
有几种方法可以排除测试的运行。
通过在根<phpunit>
节点下立即包含一个<groups>
结构来自动排除该组:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
bootstrap="vendor/autoload.php"
colors="true"
>
<testsuites>
<!-- ... -->
</testsuites>
<groups>
<exclude>
<group>ignore</group>
</exclude>
</groups>
<coverage>
<!-- ... -->
</coverage>
</phpunit>
再次说明,ignore
文本是任意部分,但是它必须与@group
注释匹配。据我所知,您可以在<exclude>
内添加多个<group>
元素。
还要注意,<groups>
必须直接位于<phpunit>
节点下面,否则如果您的phpunit.xml
存在格式问题,PHPUnit将会报错退出。
旧版本的PHPUnit使用<filter>
标签具有不同的语法。请参见此答案适用于PHPUnit 6.5。对于后人来说,这个XML配置适用于PHPUnit 9.5.20。
在运行phpunit时手动排除该测试组:
phpunit --exclude-group ignore
test
开头的方法(例如testFoo()
)将不会被执行。 - amphetamachinepublic void ignoredTest()
都是语法错误;正确的语法是(PHP 7+)public function ignoredTest(): void
或(PHP <7)public function ignoredTest()
。 - amphetamachine