-
Multiple Assertions☕️ java 2023. 10. 29. 12:47
우테코 프리코스 - 자동차 경주 게임 미션을 진행하면서 하나의 테스트 함수에서 기능에 대해 여러 결과를 검증하기 위해서 assertThat() 을 여러 번 이용해 검증을 했다.
하지만, 이 방법을 사용하다 보니 각 검증 코드가 실패한다면 다음 검증을 수행하지 않고 테스트 함수가 바로 중단되었다.
🆚 assertThat 과 assertAll
assertThat을 여러개 사용해서 여러 결과를 검증하는 방법을 사용했을 때는 하나의 검증 코드가 실패하면 그 다음 검증들은 수행되지 않았기에 여러 검증 코드들을 assertAll 으로 grouping 하여 모든 검증을 수행하고 나온 결과를 한번에 볼 수 있도록 했다.
assertThat을 이용한 테스트 코드
@Test void assertThatTest() { // given // when // then assertThat(1).isEqualTo(1); assertThat(2).isEqualTo(2); assertThat(1).isEqualTo(2); assertThat(1).isEqualTo(3); }
결과
- assertThat(1).isEqualTo(2) 이 부분에 대한 결과만 출력되고 그 이후의 검증에 대한 결과는 출력되지 않았다.
assertAll을 이용한 테스트
@Test void assertAllTest() { // given // when // then assertAll( () -> assertThat(1).isEqualTo(1), () -> assertThat(2).isEqualTo(2), () -> assertThat(1).isEqualTo(2), () -> assertThat(1).isEqualTo(3) ); }
결과
- 검증문의 실행 결과를 모두 출력했다.
☀️ assertSoftly
assertSoftly는 assertAll 과 마찬가지로 모든 검증을 수행한 후 그에 대한 모든 결과를 출력한다.
assertAll 과는 달리 실패한 코드의 라인 위치를 알려주어 실패한 검증에 대해 빠르게 찾을 수 있다.
@Test void assertSoftlyTest() { SoftAssertions.assertSoftly((softAssertions) -> { softAssertions.assertThat(1).isEqualTo(2); softAssertions.assertThat(1).isEqualTo(3); }); }
결과
💡 결론
한 번에 여러 검증을 해야하는 경우 assertAll을 사용해 실패된 검증문의 결과를 한 번에 파악하여 이를 빠르게 수정할 수 있었습니다.
많은 검증 코드가 있을 경우에 assertAll을 사용했을 때는 에러가 발생한 부분을 찾는데 오래 걸릴 수 있지만 assertSoftly를 통해 바로 문제가 발생한 코드에 접근하는데 매우 유용할 것이라고 생각해 한번에 많은 검증이 필요한 경우 assertSoftly를 사용할 것 같다.
📖 참고자료
assertAll() vs Multiple Assertions in JUnit5 | Baeldung
SoftAssertions (AssertJ fluent assertions 3.12.0 API)
'☕️ java' 카테고리의 다른 글
👻 Mockito (0) 2023.10.31 🔗 Java 문자열와 구분자 (1) 2023.10.30 ☕️ Java 17 (1) 2023.10.25 🆚 AssertJ과 JUnit 의 Assertions 비교 (1) 2023.10.25 @ParameterizedTest (0) 2023.10.25