PHPUnitManual:16.1
Revision as of 09:25, 4 July 2013 by Onionmixer (talk | contribs) (PHPUnit 16.1 Test Case 클래스의 Skeleton 을 생성 페이지 추가)
- 16.1 Test Case 클래스의 Skeleton 을 생성
기존 코드의 테스트를 만들 때는, 다음과 같은 코드를 여러번 반복하여 쓰게 될 것입니다.
public function testMethod()
{
}
PHPUnit Skeleton Generator 는 기존 클래스의 코드를 분석하여, 테스트 클래스의 skeleton 을 만들 수 있습니다.
예16.1 Calculator 클래스
<?php
class Calculator
{
public function add($a, $b)
{
return $a + $b;
}
}
?>
다음 예는, Calculator ( 예16.1 "Calculator 클래스" 를 참조하세요) 클래스를 위한 테스트 클래스의 skeleton 을 만드는 과정입니다.
phpunit-skelgen --test Calculator
PHPUnit Skeleton Generator 1.0.0 by Sebastian Bergmann.
Wrote skeleton for "CalculatorTest" to "/home/sb/CalculatorTest.php".
클래스의 각 메소드에 대해, 작성된 test case 클래스의 test case 는 불완전한 상태 (제9장 을 참조하세요) 입니다.
- Namespace 를 가지는 클래스와 Skeleton Generator
- Namespace 안에서 선언된 클래스를 테스트하기 위한 코드를 Skeleton Generator 로 생성할 때는, 해당 클래스의 qualified name 과, 클래스가 선언되어 있는 소스 파일의 경로를 넘겨야 합니다.
- 예를 들어, namespace Project 에 Calculator 클래스가 선언되어 있는 경우, 다음과 같이 Skeleton Generator 를 실행합니다.
phpunit-skelgen --test -- "project\Calculator" Calculator.php PHPUnit Skeleton Generator 1.0.0 by Sebastian Bergmann. Wrote skeleton for "project\CalculatorTest" to "/home/sb/CalculatorTest.php".
생성된 테스트 클래스를 실행한 결과는 다음과 같습니다.
phpunit --bootstrap Calculator.php --verbose CalculatorTest
PHPUnit 3.7.0 by Sebastian Bergmann.
I
Time: 0 seconds, Memory: 3.50Mb
There was 1 incomplete test:
1) CalculatorTest::testAdd
This test has not been implemented yet.
/home/sb/CalculatorTest.php:38
OK, but incomplete or skipped tests!
Tests: 1, Assertions: 0, Incomplete: 1.
@assert 선언을 메소드의 주석에 사용하여, 단순하지만 의미를 가지는 테스트를 자동 생성할 수 있습니다. 이는 불완전한 test case 가 아닙니다. 예16.2 "@assert 선언을 사용한 Calculator 클래스" 가 그 예입니다.
예16.2 @assert 선언을 사용한 Calculator 클래스
<?php
class Calculator
{
/**
* @assert (0, 0) == 0
* @assert (0, 1) == 1
* @assert (1, 0) == 1
* @assert (1, 1) == 2
*/
public function add($a, $b)
{
return $a + $b;
}
}
?>
기존 클래스의 각 메소드에 대해, @assert 선언의 내용을 체크합니다. 그 결과, 다음과 같은 테스트 코드가 생성됩니다.
/**
* Generated from @assert (0, 0) == 0.
*/
public function testAdd() {
$o = new Calculator;
$this->assertEquals(0, $o->add(0, 0));
}
생성된 test case 클래스의 실행 결과는 다음과 같습니다.
phpunit --bootstrap Calculator.php --verbose CalculatorTest
PHPUnit 3.7.0 by Sebastian Bergmann.
....
Time: 0 seconds, Memory: 3.50Mb
OK (4 tests, 4 assertions)
선언 | 변환 결과 |
@assert (...) == X | assertEquals(X, method(...)) |
@assert (...) != X | assertNotEquals(X, method(...)) |
@assert (...) === X | assertSame(X, method(...)) |
@assert (...) !== X | assertNotSame(X, method(...)) |
@assert (...) > X | assertGreaterThan(X, method(...)) |
@assert (...) >= X | assertGreaterThanOrEqual(X, method(...)) |
@assert (...) < X | assertLessThan(X, method(...)) |
@assert (...) <= X | assertLessThanOrEqual(X, method(...)) |
@assert (...) throws X | @expectedException X |
표16.1 @assert 선언의 지원 목록 |