 |
|
매개변수 테스트
애플리케이션의 비즈니스 로직에서는 테스트가 제대로 될 때까지 사용자가 매우 많은 테스트를 작성해야 한다. 이전 버전의 JUnit에서 이러한 유형의 시나리오는 테스트에서 메서드에 대한 매개변수 그룹이 다양하면 각 고유 그룹에 대한 테스트 케이스를 작성해야 했기 때문에 매우 많은 불편을 초래했다.
JUnit 4에서는 매개변수 값을 지정할 수 있는 일반 테스트를 작성할 수 있게 해주는 새로운 기능이 도입되었다. 결과적으로 테스트 케이스 하나를 작성하여 이전에 작성한 각 매개변수에 대해 이를 여러 번 실행할 수 있다.
간단한 매개변수를 통한 테스트
JUnit 4에서 매개변수 테스트를 작성하는 데에는 다음과 같이 간단한 5단계로 이루어진다.
- 매개변수를 사용하지 않는 일반 테스트를 작성한다.
-
Collection 유형을 반환하는 static 피더 메서드를 작성하고 @Parameter 주석으로 표시한다.
- 첫 번째 단계에서 정의한 일반 메서드에 필요한 매개변수 유형에 대한 클래스 멤버를 만든다.
- 이러한 매개변수 유형을 사용하고 이를 세 번째 단계에서 정의한 클래스 멤버와 연결하는 생성자를 만든다.
-
@RunWith 주석을 통해 Parameterized 클래스와 함께 실행할 테스트 케이스를 지정한다.
이러한 단계들을 차례로 살펴보자.
첫 번째 단계. 일반 테스트 작성
Listing 17에서는 정규식에 대해 여러 값을 확인하는 일반 테스트를 보여준다. 여기에서는 phrase와 match 값이 정의되지 않았다.
Listing 17. 일반 테스트
@Test
public void verifyGoodZipCode() throws Exception{
Matcher mtcher = this.pattern.matcher(phrase);
boolean isValid = mtcher.matches();
assertEquals("Pattern did not validate zip code", isValid, match);
}
|
두 번째 단계. 피더 메서드 작성
다음 단계는 피더 메서드를 작성하는 것이다. 이는 static 으로 선언해야 하고 Collection 유형을 반환해야 한다. 이 메서드는
@Parameters a주석으로 표시해야 한다. Listing 18에서와 같이 메서드 내에서 다차원 Object 배열을 만들고 이를 List로 변환한다.
Listing 18. @Parameters 주석으로 표시된 피더 메서드
@Parameters
public static Collection regExValues() {
return Arrays.asList(new Object[][] {
{"22101", true },
{"221x1", false },
{"22101-5150", true },
{"221015150", false }});
}
|
세 번째 단계. 클래스 멤버 두 개 작성
매개변수 유형은 String과 boolean이기 때문에 다음과 같이 클래스 멤버를 두 개 작성해야 한다.
Listing 19. 클래스 멤버 두 개 선언
private String phrase;
private boolean match;
|
네 번째 단계. 생성자 작성
다음으로 작성하는 생성자는 Listing 20에서와 같이 클래스 멤버를 매개변수 값에 연결한다.
Listing 20. 값을 비교하는 생성자
public ParametricRegularExpressionTest(String phrase, boolean match) {
this.phrase = phrase;
this.match = match;
}
|
다섯 번째 단계. Parameterized 클래스 지정
마지막으로 클래스 수준에서 이 테스트가 Listing 21에서와 같이 Parameterized 클래스로 실행되도록 지정한다.
Listing 21. Parameterized와 @RunWith 주석 지정
@RunWith(Parameterized.class)
public class ParametricRegularExpressionTest {
//...
}
|
테스트 실행
테스트 클래스를 실행하면 일반 verifyGoodZipCode() 테스트 메서드가 Listing 18의 regExValues() 데이터 피더 메서드에 정의된 각 값 쌍에 대해 한 번씩 네 번 실행된다.
예를 들어 이 테스트를 이클립스에서 실행하면 그림 4에서와 같이 테스트 실행을 4회 했음을 보고한다.
그림 4. 이클립스에서 실행된 매개변수 테스트
|