1. @Test(expected)

예외 타입만 확인 가능

@Test(expected = UsernameNotFoundException.class)
public void findByUsernameFail() {
	String username = "[email protected]";
	accountService.loadUserByUsername(username);
}
  1. try-catch

예외 타입과 메시지 확인 가능

하지만 코드가 다소 복잡

@Test
public void findByUsernameFail() {
	String username = "[email protected]";

	try {
		accountService.loadUserByUsername(username);
		fail("supposed to be failed");
	} catch (UsernameNotFoundException e) {
		assertThat(e.getMessage()).contains(username);
	}
}
  1. junit의 @Rule ExpectedException

코드는 간결하면서 예외 타입과 메시지 모두 확인 가능

@Rule
public ExpectedException expectedException = ExpectedException.none();

@Test
public void findByUsernameFail() {
	String username = "[email protected]";
	expectedException.expect(UsernameNotFoundException.class);
	expectedException.expectMessage(Matchers.containsString(username));

	accountService.loadUserByUsername(username);
}

항상 위에 적어 먼저 예측이 되어야 한다.