PHPUnitManual:9.1
- 9.1 불완전한 테스트
새로운 테스트 케이스 클래스를 작성할 때는, 지금부터 쓸 테스트의 내용을 명확하게 하기 위해서 우선 다음과 같은 빈 테스트 메소드를 작성하는 경향이 있습니다.
public function testSomething()
{
}
그렇지만, PHPUnit framework 에서는 빈 메소드를 "테스트에 성공했다" 고 판단하는 문제가 있습니다. 이런 잘못된 해석으로 인해, 테스트 결과 레포트가 의미 없게 됩니다. 이 테스트가 정말로 성공한 것인지 아니면 아직 테스트가 구현되지 않은 것인지를 구별할 수 없기 때문입니다. 구현하지 않은 테스트 메소드 안에서 $this->fail() 를 호출한다고 해도 달라지는 것은 없습니다. 이 경우, "테스트에 실패했다" 고 판단됩니다. 이는 구현되지 않은 테스트가 "성공" 한 것으로 판단되는 것과 마찬가지로 옳지 않습니다. (역주 : 레포트를 보고 그 테스트가 정말로 실패한 것인지, 아니면 아직 구현되지 않은 것인지 구별할 수 없습니다)
테스트의 성공을 파란불, 실패를 빨간불이라고 생각할 때, 테스트가 구현되지 않은 상태를 나타낼 노란불이 필요합니다. 이런 경우에 사용할 수 있는 인터페이스가 PHPUnit_Framework_IncompleteTest 입니다. 이 인터페이스는 테스트가 완성되지 않았거나 구현되지 않았을 때 발생하는 예외를 나타냅니다. 이 인터페이스의 표준 구현이 PHPUnit_Framework_IncompleteTestError 입니다.
예9.1 "테스트에 미완성 표식을 추가" 에서는 테스트 케이스 클래스 SampleTest 를 정의합니다. 테스트 메소드 안에서 편리한 메소드 markTestIncomplete() (이 메소드는 자동적으로 PHPUnit_Framework_IncompleteTestError 예외를 발생시킵니다) 를 호출하여 이 메소드가 아직 완성되지 않았음을 선언합니다.
예9.1: 테스트에 미완성 표식을 추가
<?php
class SampleTest extends PHPUnit_Framework_TestCase
{
public function testSomething()
{
// Optional: 필요한 경우, 여기에 테스트를 추가하세요
$this->assertTrue(TRUE, 'This should already work.');
// 테스트 처리를 중단하고, 테스트가 미완성임을 표시
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
}
?>
PHPUnit command-line test runner 에서는 미완성 테스트를 I(영문대문자 i) 로 표현합니다.
phpunit --verbose SampleTest
PHPUnit 3.7.0 by Sebastian Bergmann.
I
Time: 0 seconds, Memory: 3.75Mb
There was 1 incomplete test:
1) SampleTest::testSomething
This test has not been implemented yet.
/home/sb/SampleTest.php:12
OK, but incomplete or skipped tests!
Tests: 1, Assertions: 1, Incomplete: 1.
표9.1 "미완성 테스트용 API" 는 테스트를 미완성으로 취급하기 위한 API 입니다.
메소드 | 의미 |
void markTestIncomplete() | 현 테스트가 미완성임을 표시 |
void markTestIncomplete(string $message) | 현 테스트가 미완성임을 표시하고 $message로 설명을 추가. |
표9.1 미완성 테스트용 API |