Как игнорировать тестовый метод в phpunit без изменения его содержимого?

17

Каков атрибут, который следует разместить рядом с методом тестирования PHP, чтобы игнорировать тест с помощью PHPUnit?

Я знаю, что для NUnit атрибут:

[Test]
[Ignore]
public void IgnoredTest()
    
задан Gabriel Diaconescu 17.04.2013 в 15:40
источник

5 ответов

20

Вы можете пометить тест с помощью аннотации группы и исключить те тесты из прогона.

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

Затем вы можете запустить все тесты, но проигнорировать такие тесты:

phpunit --exclude-group ignore
    
ответ дан Brady Olsen 31.10.2013 в 18:56
источник
12

Самый простой способ - просто изменить имя метода тестирования и избежать имен, начинающихся с «теста». Таким образом, если вы не скажете 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
    }
}
    
ответ дан fiunchinho 17.04.2013 в 20:00
источник
7

Вы можете использовать метод 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.'
        );
    }
}
?>
    
ответ дан Vinoth Babu 17.04.2013 в 15:45
источник
1

Поскольку в одном из ваших комментариев вы указали, что не хотите изменять содержимое теста, если вы хотите добавить или отредактировать аннотации, вы можете использовать аннотацию @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.

Для справки см .:

ответ дан localheinz 16.08.2017 в 17:42
источник
0

Если вы назовете свой метод не с test в начале, то метод не будет выполнен PHPUnit (см. здесь ).

public function willBeIgnored() {
    ...
}

public function testWillBeExecuted() {
    ...
}

Если вы хотите, чтобы выполняемый метод не начинался с test , вы можете добавить аннотацию @test для ее выполнения.

/**
 * @test
 */
public function willBeExecuted() {
    ...
}
    
ответ дан m13r 25.07.2017 в 10:42
источник