Junit4 - JUnitParams
- 아래 코드는 중복된 코드가 많아 보인다. -> 원인은 매개변수를 받지 못했기 때문이다.
public class EventTest {
...
@Test
public void testFree() {
// 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();
}
- 매개변수를 사용하면 위의 코드를 3분의1로 줄일 수 있다.
@RunWith(JUnitParamsRunner.class)
public class EventTest {
...
@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);
}
//parametersFor prefix가 테스트 메서드를 찾아서 자동으로 파라메터로 사용을 해줌
private Object[] parametersForTestFree() {
return new Object[] {
new Object[] {0, 0, true},
new Object[] {100, 0, false},
new Object[] {0, 100, false},
new Object[] {100, 200, false}
};
}
- testCompile 'pl.pragmatists:JUnitParams:1.1.1' 을 추가한다.
- @RunWith(JUnitParamsRunner.class) 로 설정해준다.
- parametersForTestFree() 를 이용해서 매개변수를 설정해준다.
- 그렇게 하면 테스트 코드에서도 매개변수를 사용할 수 있다.
Junit 5 - @ParameterizedTest
public class Numbers {
public static boolean isOdd(int number) {
return number % 2 != 0;
}
}
@ParameterizedTest
@ValueSource(ints = {1, 3, 5, -3, 15, Integer.MAX_VALUE}) // six numbers
void isOdd_ShouldReturnTrueForOddNumbers(int number) {
assertTrue(Numbers.isOdd(number));
}
REFERENCES