3.2 예외를 기대하는 세 가지 방법
2021. 8. 13. 13:04ㆍJAVA/JUNIT
글의 목적
- JUnit에서 적어도 세 가지 방식으로 기대한 예외를 던지는 것을 명시하는 방법을 실습합니다.
3.2.1 단순한 방식 : 애너테이션 사용
아래와 같이 @Test 애너테이션의 인자를 설정하여 해당 테스트에서 예외가 발생되기를 기대할 수 있습니다.
만약 기대한 예외가 발생하면 테스트는 통과하고, 그렇지 않으면 테스트는 실패합니다.
@Test(expected=InsufficientFundsException.class)
public void throwsWhenWithdrawingTooMuch() {
account.withdraw(100);
}
3.2.2 옛 방식: try/catch와 fail
발생한 예외를 처리하는 방법으로 try/catch 블록을 활용할 수도 있습니다. 예외가 발생하지 않으면 org.junit.Assert.fail() 메서드를 호출하여 강제로 실패합니다.
@Test
public void throwsWhenWithdrawingTooMuchTry() {
try {
account.withdraw(100);
fail();
}
catch (InsufficientFundsException expected) {
assertThat(expected.getMessage(), equalTo("balance only 0"));
}
}
옛 방식은 예외가 발생한 후에 어떤 상태를 검사할때 유용합니다. 위의 코드와 같이 예외가 발생한 후 메시지를 확인하려고 합니다.
3.2.3 새로운 방식: ExpectedException 규칙
JUnit은 커스텀 규칙을 정의하여 테스트가 실행되는 흐름 동안 발생하는 일에 대한 더 큰 통제권을 부여합니다. JUnit은 바로 사용할 수 있는 소수의 유용한 규칙들을 제공합니다. 특히 ExpectedException 규칙은 예외를 검사하는데 있어 단순한 방식과 옛 방식의 좋은 점만 모았습니다.
ExpectedException 규칙 사용 방법
- 테스트 클래스에 ExpectedException 인스턴스를 public으로 선언
- @Rule 애너테이션 설정
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test
public void exceptionRule() {
thrown.expect(InsufficientFundsException.class);
thrown.expectMessage("balance only 0");
account.withdraw(100);
}
테스트의 준비 단계에서 나머지 테스트를 실행할 때 발생할 수 있는 일을 규칙에 알립니다.
3.2.4 예외 무시
검증된 예외를 처리하기 위해 테스트 코드에 try/catch 블록을 넣지 마세요. 그 대신 발생하는 예외를 다시 던지세요.
@Test
public void readsFromTestFile() throws IOException {
String filename = "test.txt";
BufferedWriter writer = new BufferedWriter(new FileWriter(filename));
writer.write("test data");
writer.close();
// ...
}
References
자바와 JUnit을 활용한 실용주의 단위 테스트
github : https://github.com/yonghwankim-dev/JUNIT-study/tree/main/iloveyouboss_13/test
'JAVA > JUNIT' 카테고리의 다른 글
AssertJ 테스트시 객체의 동등성(Equality) 검증 방법 (0) | 2024.04.07 |
---|---|
3.1 JUnit 단언 (0) | 2021.08.13 |
2.1 JUNIT 테스트 고려사항 구현 (0) | 2021.08.11 |
2. JUNIT 사용 (1) | 2021.08.11 |
1. 첫번째 JUnit 테스트 만들기 (0) | 2021.08.10 |