PHPUnit의 데이터 공급자
데이터 공급자란 무엇입니까?
메서드 또는 클래스에 대한 테스트를 작성할 때 동일한 코드에 대한 값을 사용하여 여러 어설션을 작성합니다. 데이터 공급자는 모든 변경 사항이 메서드에 전달된 값일 때 유용합니다.
DataProviders are a framework for easily controlling how data can be provided from a source
데이터 공급자 없이 테스트를 작성하는 방법에 대한 예를 들어 보겠습니다. 숫자를 합산하여 값을 반환하는 클래스
add($a, $b)
에 메서드Operations
가 있다고 가정합니다. public function test_add()
{
$actual = (new Operations)->add(1, 2);
$this->assertEquals(3, $actual);
}
여러 주장을 추가하려는 경우 다음과 같이 다른 주장을 추가하고 싶을 것입니다.
public function test_add()
{
$actual = (new Operations)->add(1, 2);
$this->assertEquals(3, $actual);
$actual = (new Operations)->add(3, 4);
$this->assertEquals(7, $actual);
}
// Or a test per method
public function test_add_first()
{
$actual = (new Operations)->add(1, 2);
$this->assertEquals(3, $actual);
}
public function test_add_second()
{
$actual = (new Operations)->add(3, 4);
$this->assertEquals(7, $actual);
}
메서드의 서명이 변경되거나 더 많은 사례를 다루려는 경우 오버헤드가 추가됩니다.
PHPUnit에서 데이터 공급자를 사용하는 방법
데이터 공급자는 이를 단순화하여 동일한 테스트에 대해 여러 값 집합을 전달할 수 있습니다. 공식 문서에서:
데이터 공급자 방법
public
여야 합니다.Iterator
인터페이스를 구현하고 각 반복 단계에 대한 배열을 생성하는 객체를 반환합니다.데이터 공급자를 사용하여 기존 테스트 사례를 변환해 보겠습니다. 데이터 공급자 이름 뒤에
dataProvider
주석을 사용합니다./**
* @dataProvider addProvider
*/
public function test_add($a, $b, $expected)
{
$actual = (new Operations)->add($a, $b);
$this->assertEquals($expected, $actual);
}
public function addProvider()
{
return array(
array(1, 2, 3),
array(4, 5, 7),
);
}
이 경우 PHPUnit은 배열을 전달하고 항목을 반복하고(다시 배열) 메소드 매개변수의 위치에 따라 인수를 전달합니다.
첫 번째 항목의 경우
array(1, 2, 3)
, test_add(1, 2, 3)
를 호출하고 어설션의 유효성을 검사합니다. 그런 다음 다음 항목 등등.PHPUnit의 인라인 데이터 공급자
데이터 공급자가 있는 위의 테스트 사례에서 데이터 공급자를 인라인하여 훨씬 더 단순화할 수 있습니다. 사용할 주석은
testWith
입니다./**
* @testWith array(
array(1, 2, 3),
array(4, 5, 7),
);
*/
public function test_add($a, $b, $expected)
{
$actual = (new Operations)->add($a, $b);
$this->assertEquals($expected, $actual);
}
Reference
이 문제에 관하여(PHPUnit의 데이터 공급자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/adithyasrinivasan/data-providers-in-phpunit-1e80텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)