728x90
반응형
매개변수를 이용하여 Junit 테스트하기, 여러 경우의 수를 간단하게 테스트 가능하게 해준다.
1. build.gradle dependency 추가
implementation 'pl.pragmatists:JUnitParams:1.1.1'
maven의 경우 https://github.com/Pragmatists/JUnitParams 참고
2. 테스트 클래스에 @RunWith 어노테이션 추가
@RunWith(JUnitParamsRunner.class)
3. @Parameters 어노테이션에 파라미터 넣어주기
@Parameters({
"0, 0, true",
"100, 0, false",
"0, 100, false"
})
JUnitParamsRunner 적용 전 테스트
@Test
public void testFree(int basePrice, int maxPrice, boolean isFree){
// Given
Event event = Event.builder()
.basePrice(0)
.maxPrice(0)
.build();
// When
event.update();
// then
assertThat(event.isFree()).isTrue();
// Given
event = Event.builder()
.basePrice(100)
.maxPrice(0)
.build();
// When
event.update();
// then
assertThat(event.isFree()).isFalse();
// Given
event = Event.builder()
.basePrice(0)
.maxPrice(100)
.build();
// When
event.update();
// then
assertThat(event.isFree()).isFalse();
}
JUnitParamsRunner 적용 후 테스트
@Test
@Parameters({
"0, 0, true",
"100, 0, false",
"0, 100, false"
})
public void testFree(int basePrice, int maxPrice, boolean isFree){
// Given
Event event = Event.builder()
.basePrice(basePrice)
.maxPrice(maxPrice)
.build();
// When
event.update();
// then
assertThat(event.isFree()).isEqualTo(isFree);
}
번외, 파라미터를 메서드로 분리하면 좀 더 type safe 한 테스트가 가능해진다.
@Test
@Parameters(method = "parametersForTestFree")
public void testFree(int basePrice, int maxPrice, boolean isFree){
// Given
Event event = Event.builder()
.basePrice(basePrice)
.maxPrice(maxPrice)
.build();
// When
event.update();
// then
assertThat(event.isFree()).isEqualTo(isFree);
}
private Object[] parametersForTestFree(){
return new Object[]{
new Object[] {0, 0, true},
new Object[] {100, 0, false},
new Object[] {0, 100, false}
};
}
테스트 클래스 전체 코드
@RunWith(JUnitParamsRunner.class)
public class EventTest {
@Test
@Parameters
// (method = "parametersForTestFree") method 생략 가능
public void testFree(int basePrice, int maxPrice, boolean isFree){
// Given
Event event = Event.builder()
.basePrice(basePrice)
.maxPrice(maxPrice)
.build();
// When
event.update();
// then
assertThat(event.isFree()).isEqualTo(isFree);
}
private Object[] parametersForTestFree(){
return new Object[]{
new Object[] {0, 0, true},
new Object[] {100, 0, false},
new Object[] {0, 100, false}
};
}
}
728x90
반응형
'JAVA' 카테고리의 다른 글
[JAVA] 정규 표현식(replaceAll) (1) | 2022.10.08 |
---|---|
[JAVA] String / StringBuffer / StringBuilder 차이 (0) | 2022.10.08 |