tdd 관련 포스팅
TDD를 위한 Junit5 gradle 세팅은 위 문서에서 확인하면 된다.
이번 포스팅에서는 Junit5에서 유용하게 쓰이는 기능들에 대해 포스팅 하려 한다.
@DisplayName
@DisplayName 어노테이션은 각 테스트가 어떤 역할을 하는지 명시적으로 표현이 가능하다.
@Test
@DisplayName("MyTestClass")
public class DisplayNameTest {
}
@ParameterizedTest
@ParameterizedTest 어노테이션은 한 번에 여러가지의 테스트 케이스를 테스트 하기 위해 사용한다.
ValueSource
@ParameterizedTest
@ValueSource(strings = {
"6 * 1",
"2 * 3",
"3 + 3"
})
void operateTest(String input) {
assertThat(Calculator.calculate(input)).isEqualTo(6);
}
CsvSource
@ParameterizedTest
@CsvSource(value = {
"+:PLUS",
"-:MINUS",
"*:MULTIPLY",
"/:DIVIDE"
}, delimiter = ':')
void getOperatorTest(String symbol, Operator operator) {
assertThat(Operator.getOperator(symbol)).isEqualTo(operator);
}
assertAll
assertAll는 모든 테스트 코드가 pass일 경우 pass한다.
@Test
void checkAll() {
assertAll(
() -> assertThat(1).isEqualTo(1),
() -> assertThat(2).isEqualTo(2),
() -> assertThat(3).isEqualTo(3),
() -> assertThat(4).isEqualTo(4),
() -> assertThat(5).isEqualTo(5)
);
}
allSatisfy
assertAll의 경우는 여러가지의 테스트 코드에 대한 확인이 필요한 것인데 Collection의 형태로 반환되는 method에 대한 테스트 코드 작성이 필요한 경우가 있다. 이럴 때는 forEach처럼 allSatisfy를 사용해 주면 좋다.
@Test
void getAllTest() {
assertThat(Numbers.getAll())
.allSatisfy(number -> assertThat(number.isUnsigned()).isFalse());
}
assertThrows, assertThatThrownBy, assertThatExceptionOfType
테스트 중 특정한 Exception이 발생하는 지 확인할 때 사용할 수 있다.
@Test
void checkAll() {
assertThrows(RuntimeException.class, () -> Program.run());
}
@Test
void checkAll() {
assertThatThrownBy(() -> Program.run())
.isExactlyInstanceOf(RuntimeException.class);
}
@Test
void checkAll() {
assertThatExceptionOfType(RuntimeException.class).isThrownBy(() -> Program.run());
}
PREVIOUSStatic Class와 Static method
NEXTstream과 for문의 사용