data provider는 임의 인수를 사용하고자 할 때 사용한다.
데이터를 공급하는 함수는 반드시 public이어야 하며 반복되는 배열 혹은 반복되는 인터페이스를 반환해야 한다.
아래 예제에서는 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..');
}
아래 코드와 같이 변경한다면 테스트를 하고자 하는 개발자는 본인이 비교하고자 하는 모든 데이터를 한번에 테스트 할수 있다.
@dataProvider 로 테스트하고자 하는 모든 데이터를 반환하는 getExpectedData를 연결해주고
테스트 함수 코드상에서 사용하고자 하는 파라미터명을 지정해주면 된다.
/**
* @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를 통해 테스트 해보면 좋을 듯 싶다.