[테스트코드]단위테스트 - 예제 - @dataProvider

보람·2022년 1월 28일
0

테스트코드

목록 보기
4/4

Data Providers

data provider는 임의 인수를 사용하고자 할 때 사용한다.
데이터를 공급하는 함수는 반드시 public이어야 하며 반복되는 배열 혹은 반복되는 인터페이스를 반환해야 한다.

data provider 도입 전

아래 예제에서는 testFunc()함수를 테스트하기 위해서 수시로 $param1, $param2, $expectedData를 변경해줘야 한다.

   /**
     * @test
     * @return void
     */
    public function testEqualExpectedData(): void
    {
        $param1 = '1:param1';
        $param2 = '1:param2';
        $expectedData = ['1:data1', '1:data2'];
        
        $returnRes = $this->testFunc($param1, $param2); //결과값도출 함수 호출

        $this->assertEquals($expectedData, $returnRes, 'not equal..');
    }

data provider 도입 후

아래 코드와 같이 변경한다면 테스트를 하고자 하는 개발자는 본인이 비교하고자 하는 모든 데이터를 한번에 테스트 할수 있다.
@dataProvider 로 테스트하고자 하는 모든 데이터를 반환하는 getExpectedData를 연결해주고
테스트 함수 코드상에서 사용하고자 하는 파라미터명을 지정해주면 된다.

  • 위에서 언급한것처럼 데이터 공급 함수는 반드시 public이어야 하며 반복되는 배열 혹은 반복되는 인터페이스를 반환해야 한다.
   /**
     * @test
     * @testdox getExpectedData 함수에서 정의한 값의 기대값이 실제값과 일치하는지 확인한다.
     * @dataProvider getExpectedData
     * @param string $param1
     * @param string $param2
     * @param array $expectedData
     * @return void
     */
    public function testEqualExpectedData(string $param1, string $param2, array $expectedData): void
    {
        $returnRes = $this->testFunc($param1, $param2); //결과값도출 함수 호출

        $this->assertEquals($expectedData, $returnRes, 'not equal..');
    }

    /**
     * data Provider 로 테스트코드에서 여러가지 경우에 대한 테스트를 할때 사용할 수 있는 함수 -> 반드시 public 으로 선언해야한다.
     * @return array
     */
    public function getExpectedData(): array
    {
        //파라미터1, 파라미터2, 기대결과
        return [
            [ //비교데이터1
                '1:param1', '1:param2', ['1:data1', '1:data2']
            ],
            [ //비교데이터2
                '2:param1', '2:param2', ['2:data1', '2:data2']
            ],
            [ //비교데이터3
                '3:param1', '3:param2', ['3:data1', '3:data2']
            ],
        ];
    }

내가 생각하는 data provider 의 이점

  • @dataProvider 는 복잡한 연산을 반환하는 함수가 내가 생각하는 결과값과 일치하는지를 확인할 때 쓰면 좋을 것 같다.
  • 하나의 값에 대해서만 테스트하는 것이 아닌 테스트 하고자 하는 모든 값을 차례대로 동시에 테스트 가능하다는 이점이 있다.
  • 실제로 회사 프로젝트에서 파라미터에 따라 리턴되는 값이 다른 함수를 케이스별로 테스트하고자 할때 data provider를 사용했더니 지우고 새로 쓰는 일이 줄어서 간편하게 테스트를 할 수 있었다.

여러 경우별로 다양한 값을 도출하는 함수를 테스트 한다면 data provider를 통해 테스트 해보면 좋을 듯 싶다.

profile
백엔드 개발자

0개의 댓글