PHPUnitManual:6.3
- 6.3 Fixture 의 공유
복수의 테스트가 fixture 를 공유해서 얻을 수 있는 이익은 거의 없습니다. 그렇지만 설계상의 이유 등으로 fixture 를 공유해야만 하는 경우도 있습니다.
복수의 테스트가 fixture 를 공유하는 좋은 예로는, 데이터베이스 접속이 있습니다. 테스트할 때마다 새롭게 접속하는 것보다는 한 번 로그인한 뒤에는 그 상태를 재이용하는 게 좋습니다. 이 방법으로 테스트 실행 시간이 단축 가능합니다.
"예6.3: test suite 안의 복수의 테스트의 fixutre 공유" 에서는, 템플릿 메소드 setUpBeforeClass() 와 tearDownAfterClass() 를 사용하여 테스트 케이스 클래스의 첫번째 테스트를 실행하기 전에 데이터베이스에 접속하고, 마지막 테스트가 끝난 후에 접속을 해제하고 있습니다.
예6.3: test suite 안의 복수의 테스트의 fixutre 공유
<?php
class DatabaseTest extends PHPUnit_Framework_TestCase
{
protected static $dbh;
public static function setUpBeforeClass()
{
self::$dbh = new PDO('sqlite::memory:');
}
public static function tearDownAfterClass()
{
self::$dbh = NULL;
}
}
?>
이처럼 fixture 를 공유하는 것이 테스트의 가치를 감소시킴을 잊지 마십시오. 문제는, 오브젝트 간의 관계성이 충분히 낮아지지 않는다는 것입니다. 복수의 오브젝트가 연계된 테스트를 만들어 설계상의 문제를 외면하는 대신, 설계를 수정하여 stub (10장 Test Doubles 참조) 를 사용하여 테스트를 작성하는 것이 바람직합니다.