JAVA/JAVA | Spring 학습기록

[TDD] Test 코드에서 Exception을 받고 싶을 때

kth990303 2021. 9. 22. 17:50
반응형

간혹 테스트코드를 작성할 때, 예외를 띄우는 것을 기대하는 경우가 있을 것이다.

그런 경우는 아래와 같이 작성하면 된다.

    @Test
    void notFoundMessageCode(){
        Assertions.assertThatThrownBy(()-> messageSource.getMessage("no_code", null, null))
                .isInstanceOf(NoSuchMessageException.class);
    }

- assertThatThrownBy : 예외가 throw됐을 경우 그 예외를 catch해주는 기능을 가진다.

 

위 코드에선, no_code라는 메시지가 저장돼있지 않아 람다식에서 NoSuchMessageException 에러를 throw해주었으며, 따라서 isInstanceOf에서 예상한 에러 종류와 일치하므로 Test가 Pass한다.

Pass

 

주의할 점

아래와 같이 작성하면 안된다.

    @Test
    void notFoundMessageCode(){
        Assertions.assertThatThrownBy(messageSource.getMessage("no_code", null, null))
                .isInstanceOf(NoSuchMessageException.class);
    }

assertThatThrownBy 안에는 람다식이 들어가야 한다.

어차피 저 과정 속에서 exception이 발생하는데 상관없는거 아니냐고 할 수 있는데, 컴파일러 입장에선 에러인지 아닌지 런타임 전엔 알 수가 없어 String형이라 생각해 빨간줄을 띄워준다.

왜 String형을 보냈냐고 화내는 귀여운 인텔리제이

 

 

반응형