[phpunit] Skip Test with message

PHPunit을 사용해 테스트를 하다보면 추후 기능 구현을 위해 남겨 두었다가 개발을 위해 잠시 테스트를 스킵하고 싶은데,
이에 대한 걸 단순히 주석 처리나, ignore시켜서 하기에는 나중에 나 스스로를 못믿기도 하고(…)
테스트 할때마다 이를 표시하고 싶은데, risk 상태로 두자니 찝찝하고 여러모로 어떻게 처리해야할지 모르는 상황에서 markTestSkipped메소드를 찾게 되었다.

Mark Test Skipped

이 메소드는 이름 그대로 해당 test를 넘겨주는 역할을 한다. 다만, 테스트를 아에 건너 뛰는것이 아닌 해당 테스트가 스킵되었고 어떤 내용으로 스킵되었는지를 표시해준다.

// Test codes ...
    public function testSomeThing(): void
    {
        $this->markTestSkipped('this test skipped because i want');
        // ...
    }
// Test codes ...

위처럼 markTestSkipped는 문자열을 인수로 받는다. skip의 s 로 표시된다.

PHPUnit 8.5.4 by Sebastian Bergmann and contributors.

.S                                                  2 / 2 (100%)

Time: 37.1 seconds, Memory: 28.00 MB

OK, but incomplete, skipped, or risky tests!
Tests: 2, Assertions: 1, Skipped: 1.

markTestIncomplete 와의 차이점

또한 phpunit에는 markTestIncomplete메소드가 있어 해당 테스트가 완료되지 않았다는 것을 표기해 줄 수 있다. 위에 상황을 봣을 땐 이 메소드가 더 어울리는 것같지만, markTestSkippedartisan test를 이용할 때 다른 결과를 보여준다.

위처럼 markTestSkipped는 해당 인수는 아래와 같이 테스트 결과와 함께 표시되며, 인자로 전달된 메시지를 출력해준다. 이를 이용해 왜 해당 테스트가 skip되었는지를 명확하게 표시 해 줄 수 있다.

[email protected]:~/test$ artisan test

   WARN  Tests\Feature\MyTest
  ✓ others
  s some thing → this test skipped because i want

  Tests:  1 skipped, 1 passed
  Time:   0.10s
[email protected]:~/test$ artisan test

   WARN  Tests\Feature\MyTest
  ✓ others
  i some thing

  Tests:  1 incompleted, 1 passed
  Time:   0.11s

예를 들어 config(‘range’) 의 값이 10 미만일 때 만 skip하고 싶고 왜 스킵되었는 표시해주고 싶을때 사용할수 있다.