인프런 커뮤니티 질문&답변

1q2w3e4r님의 프로필 이미지

작성한 질문수

스프링과 JPA 기반 웹 애플리케이션 개발

프로필 뷰

프로필 뷰 에러는 어떻게 테스트 해볼 수 있을 까요?

작성

·

229

0

이번 강좌에서 존재하지 않는 닉네임으로 접근하면 

IllegalArgumentException 이 발생하는데 어떻게 해야 테스트를 할수 있을까요?

mockMvc.perform(get("/profile/{nickname}", nickname))
                .andExpect(result -> assertTrue(result.getResolvedException() instanceof IllegalArgumentException));

이렇게 하면 에러를 캐치하지 못하고

assertThrows(IllegalArgumentException.class, () ->mockMvc.perform(get("/profile/{nickname}", nickname)));
이방식으로는 스프링 래퍼 클레스인 <org.springframework.web.util.NestedServletException>이 발생했다고 나옵니다

org.assertj.core.api.Assertions.Assertions.assertThatThrownBy(() -> mockMvc.perform(get("/profile/{nickname}", nickname))).hasCause(new IllegalArgumentException());
이건 에러메세지 까지 비교하는데 

어떤방법으로 테스트 하는게 좋을까요?

참고 : 

https://www.baeldung.com/junit-assert-exception

https://www.python2.net/questions-151506.htm

답변 2

1

 

        assertThatThrownBy(() -> mockMvc.perform(get("/profile/{nickname}", nickname)))
                .hasCauseInstanceOf(IllegalArgumentException.class);

이렇게하니까 통과합니다.

0

백기선님의 프로필 이미지
백기선
지식공유자

IllegalArgumentException이 발생하는 상황을 테스트로 검증하고 싶다는 것이죠?

보여주신 코드에서는 org.assertj.core.api.Assertions.Assertions.assertThatThrownBy(() -> mockMvc.perform(get("/profile/{nickname}", nickname))).hasCause(new IllegalArgumentException());

 이게 제일 직관적이고 좋아 보이긴하는데 실제로 작성하신 코드를 깃헙에 올려서 공유해 주시면 좀 더 살펴보겠습니다.

1q2w3e4r님의 프로필 이미지
1q2w3e4r
질문자

컨트롤러 

https://github.com/seunghwan-won/zzzz/blob/step-17-profile-view/src/main/java/com/studyolle/account/AccountController.java

테스트 

https://github.com/seunghwan-won/zzzz/blob/step-17-profile-view/src/test/java/com/studyolle/account/AccountControllerTest.java

입니다.

이전에 junit4로 테스트 할 때는 

@Test(에러.class)로  했던걸로 기억나는데

기선님은 어떤방식으로 처리했을지 궁금해서 남겼습니다~

1q2w3e4r님의 프로필 이미지

작성한 질문수

질문하기