PHPUnit으로 매개 변수화 테스트를 시도합니다.
개요
팀원들이 PHPUnit에서의 파라메탈라이즈드 테스트를 매번 읽는 형태로 썼습니다.
PHPUnit의 기능을 사용하면 더 가독성을 올릴 수 있다고 생각했으므로, 자기 학습도 겸해 하는 방법을 정리해 보겠습니다.
매개변수화된 테스트
매개 변수화 된 테스트는
渡す引数が違うだけで同じメソッドを何度もテストする
라는 테스트 방법입니다.이번에는 아래와 같은 FizzBuzz를 사용하여 설명하겠습니다.
FizzBuzz
declare(strict_types=1);
class FizzBuzz
{
public function toFizzBuzz(int $count)
{
$result = '';
if ($count % 3 == 0) {
$result .= 'Fizz';
}
if ($count % 5 == 0) {
$result .= 'Buzz';
}
if (!($count % 3 == 0)
&& !($count % 5 == 0)
) {
$result .= $count;
}
return $result;
}
}
이 프로그램으로 테스트 코드를 작성하는 경우
$count
에는 여러 매개 변수로 테스트를 수행한다고 생각합니다.이것을 어리석게 구현하려고하면
class FizzbuzzTest extends TestCase
{
/**
* @test
*/
public function toFizzBuzzTest()
{
$obj = new FizzBuzz();
$res = $obj->toFizzBuzz(1);
$this->assertEquals($res, 1);
$res = $obj->toFizzBuzz(3);
$this->assertEquals($res, 'Fizz');
$res = $obj->toFizzBuzz(5);
$this->assertEquals($res, 'Buzz');
$res = $obj->toFizzBuzz(15);
$this->assertEquals($res, 'FizzBuzz');
}
}
이런 식으로 중복되어 버릴까 생각합니다.
이것을 PHPUnit의 기능을 사용해, 가독성을 올려 봅니다.
사용하는 것은
@dataProvider
어노테이션입니다.@dataProvider
어노테이션을 사용하면 아래와 같이 배열로 데이터를 전달할 수 있습니다.class FizzbuzzTest extends TestCase
{
public function toFizzBuzzDataProvider()
{
return [
'number 1' => [1, 1],
'number 3' => [3, 'Fizz'],
'number 5' => [5, 'Buzz'],
'number 15' => [15, 'FizzBuzz'],
];
}
/**
* @test
* @dataProvider toFizzBuzzDataProvider
*/
public function toFizzBuzzTest($param, $actual)
{
$obj = new FizzBuzz();
$res = $obj->toFizzBuzz($param);
$this->assertEquals($res, $actual);
}
}
이렇게 쓰는 것이 파라미터가 늘어났을 때 테스트가 보기 쉬워질까 생각합니다.
비고
@dataProvider
로 건네주는 배열에 이름을 붙여 두면, 어디에서 실패했는지 알기 쉽습니다.마지막으로
이번 예제라면 거기까지 편리하게는 보이지 않지만, 복수의 파라미터를 건네주어, 수천행과 코드가 부풀어 오를 때에는, 특히 유효한 것일까라고 생각합니다.
끝까지 읽어 주셔서 감사합니다.
참고
Reference
이 문제에 관하여(PHPUnit으로 매개 변수화 테스트를 시도합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/juve_534/items/d3b4a4cb4601c3f5b2c6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)