PHPunit에서 테스트를 건너 뛰는 방법?


88

젠킨스와 관련하여 phpunit을 사용하고 있으며 XML 파일에서 구성을 설정하여 특정 테스트를 건너 뛰고 싶습니다. phpunit.xml

명령 줄에서 사용할 수 있다는 것을 알고 있습니다.

phpunit --filter testStuffThatBrokeAndIOnlyWantToRunThatOneSingleTest

<filters>태그가 코드 커버리지 전용 이므로 XML 파일로 어떻게 변환 합니까?

다음을 제외한 모든 테스트를 실행하고 싶습니다. testStuffThatAlwaysBreaks


1
KO : 테스트 수정은 어떻습니까? btw, 안녕 from welly ;-)
zerkms

나는 테스트를 작성하지 않았고, 관련이없는 것입니다. 또한 핵심 파일을 변경하고 싶지도 않습니다
Filype

의심스럽게도 그렇게 할 수 있습니다. 매우 이상한 요구 사항입니다
zerkms

추신 : 당신은 필터를 언급했지만 모든 경로를 제외하기 때문에 당신을 도울 수는 없습니다. 그렇지 않으면 <exclude>-당신을 위해 일할 것입니다
zerkms

제안 된 phpunit.xml.dist 파일을 게시 할 수 있습니까?
Filype

답변:


168

중단되었거나 나중에 작업을 계속해야하는 테스트를 건너 뛰는 가장 빠르고 쉬운 방법은 개별 단위 테스트의 맨 위에 다음을 추가하는 것입니다.

$this->markTestSkipped('must be revisited.');

항상 xml 구성 파일에 디렉터리 나 테스트를 추가 할 수 있습니다. 그러나 이것이 컨트롤러이거나 그와 유사한 경우에는 해당 파일에 수십 개의 다른 테스트가 있기 때문에 실제로 그리 실용적이지 않습니다. 단위 테스트에 대한 액세스 권한이없고 이유를 이해하지 못하는 경우 제외하는 것 외에는 선택의 여지가 없습니다.
jsteinmann 2012

5
이 AFAIK 바인딩 늦게 정적을 사용하고, 일부 클래스 (phpunit을 3 적어도) 정적 메서드이기 때문에, 당신은 사용해야합니다 static::markTestSkipped('');대신 $this->. 최신 PHP 버전에서 경고를 생성합니다. 서명 : public static function markTestSkipped($message = '')
Daniel W.

전체 단위 테스트 파일의 더 나은 예가 필요합니다. 단순한 스 니펫이 아닙니다.
Ligemer 2017-06-05

@DanielW. 공식 phpunit을 받으세요 보여주는 사례가$this->markTestSkipped()
nulll

당신이 볼 수 @nulll 6.5의 소스 코드에 , markTestSkipped()여전히 정적 방법이다.
Daniel W.

31

전체 파일을 무시할 수 있다면

<?xml version="1.0" encoding="UTF-8"?>

<phpunit>

    <testsuites>
        <testsuite name="foo">
            <directory>./tests/</directory>
            <exclude>./tests/path/to/excluded/test.php</exclude>
                ^-------------
        </testsuite>
    </testsuites>

</phpunit>

이것은 내가 시도한 것입니다, 여전히 그것은없이 <exclude>893 개의 테스트와 함께 893 개의 테스트를 말합니다<exclude>
Filype

1
테스트를 실행하는 데 약 20 분이 소요됩니다. 얼마나 많은 테스트가 실행되는지 쉽게 확인할 수있는 방법이 있습니까? 현재는 첫 번째 행이 완료 될 때까지 기다려야합니다....... 63 / 893 ( 7%)
Filype

5
@Filype : 그런 다음 잘못된 경로를 지정했을 것입니다. 그것은 나를 위해 잘 작동합니다. 테스트 수를 얻을 수 있는지 확실하지 않습니다. 추신 : 단위 테스트는 너무 오래 실행되지 않아야합니다. @group특성상 주석 및 분할 테스트를 사용하는 것이 좋습니다
zerkms

20

때로는 PHP 코드로 정의 된 사용자 정의 조건에 따라 특정 파일에서 모든 테스트를 건너 뛰는 것이 유용합니다. makeTestSkipped도 작동하는 setUp 함수를 사용하여 쉽게 할 수 있습니다.

protected function setUp()
{
    if (your_custom_condition) {
        $this->markTestSkipped('all tests in this file are invactive for this server configuration!');
    }
}

your_custom_condition 은 정적 클래스 메소드 / 속성, phpunit 부트 스트랩 파일에 정의 된 상수 또는 전역 변수를 통해 전달할 수 있습니다.


무엇 Config클래스는? 어디에 두나요?
cronfy

@cronfy 모든 전역 범위 액세스 가능 클래스 (Singleton / Register 디자인 패턴) 또는 phpunit의 부트 스트랩 파일에 설정된 전역 변수 일 수 있습니다. 기본적으로 논리는 다음과 같습니다. if ($ testsFromThisFileShouldBeSkipped) {$ this-> markTestSkipped (...); }
콘라드 Gałęzowski

"전체 파일을 건너 뛰도록 설정 내부 markTestSkipped을"... 조건 제거하고 대답은 정직 것
스파크

1
@SparK 나는 당신의 요점을 보았지만 전체 테스트 클래스 를 조건부 건너 뛰는 방법을 제공했습니다 . 나는 그것을 약간 변경하여 일반적인 규칙에 찬성하여 사용자 정의 방식을 제거했습니다.
콘라드 Gałęzowski
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.