如何在不修改其内容的情况下忽略 phpunit 中的测试方法?

Posted

技术标签:

【中文标题】如何在不修改其内容的情况下忽略 phpunit 中的测试方法?【英文标题】:How can I ignore a test method in phpunit without modifying its content? 【发布时间】:2013-04-10 07:27:49 【问题描述】:

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

我知道 NUnit 的属性是:

[Test]
[Ignore]
public void IgnoredTest()

【问题讨论】:

【参考方案1】:

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

另外,你可以告诉 PHPUnit to skip a specific test:

<?php
class ClassTest extends PHPUnit_Framework_TestCase
     
    public function testThatWontBeExecuted()
    
        $this->markTestSkipped( 'PHPUnit will skip this test method' );
    
    public function testThatWillBeExecuted()
    
        // Test something
    

【讨论】:

【参考方案2】:

由于您在其中一个 cmets 中建议您不想更改测试的内容,如果您愿意添加或调整注释,您可以滥用 @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.

参考见:

https://phpunit.de/manual/current/en/incomplete-and-skipped-tests.html#incomplete-and-skipped-tests.skipping-tests-using-requires

【讨论】:

【参考方案3】:

您可以使用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.'
        );
    

?>

【讨论】:

谢谢你的回答,但我不想修改测试的内容。只是有时我想忽略一些测试,然后在测试流程中重新添加它们。【参考方案4】:

如果你的方法名称不是以test开头,那么PHPUnit将不会执行该方法(参见here)。

public function willBeIgnored() 
    ...


public function testWillBeExecuted() 
    ...

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

/**
 * @test
 */
public function willBeExecuted() 
    ...

【讨论】:

【参考方案5】:

您可以使用group annotation 标记测试并从运行中排除这些测试。

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

然后你可以像这样运行所有测试但忽略的测试:

phpunit --exclude-group ignore

【讨论】:

以上是关于如何在不修改其内容的情况下忽略 phpunit 中的测试方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何跳过或忽略标题上方的行?

Excel 2010:如何在不修改其输入值的情况下跨多个单元格更改公式?

如何在不缩放其内容的情况下调整 opengl 视口大小

如何在不扭曲其内容的情况下沿一个轴调整 UICollectionViewCell 的大小?

如何在不改变其内容位置的情况下弹出整个 Div

如何在不忽略前缀零的情况下打印完整位?