Tùy thuộc vào những gì bạn muốn kiểm tra ngoại lệ. Nếu tất cả các bạn đang làm là kiểm tra xem các ngoại lệ được ném, sau đó sử dụng @Test(expected=...)
có lẽ là cách dễ nhất:
@Test(expected=CustomException.class)
public void checkNullObject() throws CustomException {
MyClass myClass= null;
MyCustomClass.get(null);
}
Tuy nhiên, @Rule ExpectedException có rất nhiều lựa chọn, bao gồm cả kiểm tra các tin nhắn, từ javadoc :
// These tests all pass.
public static class HasExpectedException {
@Rule
public ExpectedException thrown= ExpectedException.none();
@Test
public void throwsNothing() {
// no exception expected, none thrown: passes.
}
@Test
public void throwsNullPointerException() {
thrown.expect(NullPointerException.class);
throw new NullPointerException();
}
@Test
public void throwsNullPointerExceptionWithMessage() {
thrown.expect(NullPointerException.class);
thrown.expectMessage("happened?");
thrown.expectMessage(startsWith("What"));
throw new NullPointerException("What happened?");
}
@Test
public void throwsIllegalArgumentExceptionWithMessageAndCause() {
NullPointerException expectedCause = new NullPointerException();
thrown.expect(IllegalArgumentException.class);
thrown.expectMessage("What");
thrown.expectCause(is(expectedCause));
throw new IllegalArgumentException("What happened?", cause);
}
}
Vì vậy, bạn có thể kiểm tra thư, nguyên nhân ban đầu của ngoại lệ. Để kiểm tra thư, bạn có thể sử dụng đối sánh, để bạn có thể kiểm tra startsWith()
và tương tự.
Một lý do để sử dụng kiểu ném/nắm kiểu cũ (Junit 3) là nếu bạn có yêu cầu cụ thể. Không có nhiều trong số này, nhưng điều này có thể xảy ra:
@Test
public void testMe() {
try {
Integer.parseInt("foobar");
fail("expected Exception here");
} catch (Exception e) {
// OK
}
}
Nguồn
2012-07-11 09:25:27
Tôi sử dụng biểu mẫu thứ hai. –
Chúng tôi cũng sử dụng biểu mẫu thứ hai. – SWoeste
Hoặc là bản sao của http://stackoverflow.com/questions/785618/in-java-how-can-i-validate-a-thrown-exception-with-junit hoặc chủ yếu dựa trên ý kiến – Raedwald