[테스트코드]단위테스트 - Fixtures(설계) - setUp()

보람·2022년 1월 19일
0

테스트코드

목록 보기
3/4


테스트에서 가장 많은 시간이 소요되는 부분 중 하나는 테스트에 사용할 값들을 설정하는 일들이다.

아래 정리된 예제에서 사용되는 값은 단순히 $stack 변수에 저장되는 배열이었다.

그러나 우리가 실제 프로그램에서 테스트하게 될 값은 단순 배열보다 훨씬 더 복잡하며, 그에 따라 값을 설정하는 데 필요한 코드의 양이 증가하게 된다.

이러한 문제는 비슷한 값을 사용하고자 하는 테스트 함수에서 더욱 심각해진다.

PHP Unit에서는 이러한 문제를 해결하기 위해서 동일한 값을 사용하고자 중복된 코드를 작성하는 것을 방지하기 위하여 setUp()과 testDown() 함수를 제공한다.

setUp() : 테스트 메서드 실행전 테스트 값 만드는 곳
tearDown() : 테스트 메서드 실행 후 테스트 값 정리하는 곳

class StackTest extends TestCase
{
    protected array $stack;

    /**
     * 아래 테스트 함수들에서 사용할 값 설정 
     **/
    protected function setUp()
    {
        $this->stack = [];
    }

    public function testEmpty()
    {
        $this->assertTrue(empty($this->stack));
    }

    public function testPush()
    {
        array_push($this->stack, 'foo');
        $this->assertEquals('foo', $this->stack[count($this->stack)-1]);
        $this->assertFalse(empty($this->stack));
    }

    public function testPop()
    {
        array_push($this->stack, 'foo');
        $this->assertEquals('foo', array_pop($this->stack));
        $this->assertTrue(empty($this->stack));
    }
}

두가지 모두 써야 하는가? No

setUp()함수와 testDown()는 이론상으로는 잘 대칭되어 두가지 모두를 써야 할것만 같다..

하지만 실제로는 그렇지 한다.

실제로는 setUp()에서 파일 또는 소켓과 같은 외부 리소스를 할당하여 사용한 경우에만 testDown()에서 할당을 해제하도록 구현하면 된다.

profile
백엔드 개발자

0개의 댓글