상세 컨텐츠

본문 제목

실용주의 단위 테스트. 3장. JUnit 단언 깊게 파기.

TIL/실용주의 단위 테스트

by box-jeon 2019. 11. 3. 22:07

본문

'단언'이라고 하니 무척 생경합니다. 'Assert'도 익숙한 단어는 아니지만, 테스트 맨 마지막에 늘 들어가는 함수 이름이기도 하니 '단언'보다는 가깝게 느껴지네요. Hamcrest 라이브러리를 활용해 다양한 방법으로 단언을 활용하는 방법을 배웁니다. 

JUnit 단언

JUnit은 AssertTrue, AssertEqual, AssertThat 등 용도에 따라 사용할 수 있는 다양한 단언들을 제공합니다. 또한, Hamcrest가 제공하는 인터페이스들을 충분히 사용하면, 단언문이 영어 문장처럼 읽히도록 작성할 수 있습니다. 프로그래머가 아니어도 의도를 파악하는데 어려움이 없을 정도입니다.

예외를 기대하는 세 가지 방법

테스트 도중에 exception이 발생하면 기본적으로 fail이 됩니다. 하지만 특정 조건에서 exception이 의도대로 발생해야하는 상황을 테스트해야하는 경우에 대해 소개합니다.

 

  1.  단순한 방법: 애너테이션 사용
    • '애너테이션'이 너무나 신경쓰였지만 애너테이션(ӕnətéiʃən)이 맞습니다.
    • 테스트 상황에서 의도된 exception을 애너테이션으로 지정할 수 있습니다.
    • 지정된 exception이 발생해야만 테스트가 통과됩니다.
  2.  옛 방식: try/catch와 fail
    • 의도된 exception이 발생할 경우, catch 블록에서 단언문을 호출합니다.
    • Exception이 발생하지 않을 경우, org.junit.Assert.fail()을 명시적으로 호출하여 테스트를 실패하게 만들어야 합니다.
  3.  새로운 방식: ExpectedException 규칙
    • 각 테스트에서 기대하고 있는 예외를 지정할 수 있다는 점은 첫 번째 방법과 동일하지만, exception class type 외에 메시지나 원인 객체 등의 기대 사항을 지정하는 것이 가능합니다.
    • 또 다른 방법으로, 람다 표현식으로 구현된 FishBowl이라는 라이브러리를 사용하면, 람다 표현식의 결과에 assert에 사용하는 예외 객체에 할당할 수 있습니다.
  4. 예외 무시
    • 자바는 checked exception을 반드시 처리하도록 되어 있지만, 발생할 가능성이 없거나 무시할 수 있는 수준의 exception이라면 굳이 처리를 하지 않는 것도 방법입니다. 테스트케이스가 그냥 throws하도록 구현합니다.

관련글 더보기

댓글 영역