@Test
어노테이션에서 인자로 기대한 예외를 지정할 수 있다.
@Test(expecter = InsufficientFundsException.class)
public void throwsWhenWithdrawingTooMuch() {
account.withdraw(100;
}
위 예시 코드에서 InsufficientFundsException
이 발생하면 테스트가 통과하고, 그렇지 않으면 실패한다.
익숙한 맛
@Test
public void throwsWhenWithdrawingTooMuchTry() {
try {
account.withdraw(100);
fail();
}
catch (InsufficientFundsException expected) {
assertThat(expected.getMessage(), equalTo("balance only 0"));
}
}
예외가 발생하면 제어권이 catch블록으로 넘어간다.
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);
}
@Test
public void readsFromTestFile() throws IOException {
String filename = "test.txt";
BufferedWriter writer = new BufferedWriter(new FileWriter(filename));
writer.write("test data");
writer.close();
// ...
}