如果拋出一個異常的方法,如何編寫一個測試用例來驗證該方法實際上是拋出預期的異常?如何使用JUnit進行單元測試時處理異常?
3
A
回答
0
你可以嘗試捕捉所需的異常,這樣做assertTrue(true)
:
@Test
testIfThrowsException(){
try{
funcThatShouldThrowException(arg1, agr2, agr3);
assertTrue("Exception wasn't thrown", false);
}
catch(DesiredException de){
assertTrue(true);
}
}
12
在JUnit的最新版本,它的工作原理是這樣:
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
public class NumberFormatterExceptionsTests {
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test
public void shouldThrowExceptionWhenDecimalDigitsNumberIsBelowZero() {
thrown.expect(IllegalArgumentException.class); // you declare specific exception here
NumberFormatter.formatDoubleUsingStringBuilder(6.9, -1);
}
}
更多ExpectedExceptions:
http://kentbeck.github.com/junit/javadoc/4.10/org/junit/rules/ExpectedException.html
http://alexruiz.developerblogs.com/?p=1530
// 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?");
}
}
5
我知道的兩個選項。
如果使用junit4
@Test(expected = Exception.class)
,或者使用junit3
try {
methodThatThrows();
fail("this method should throw excpetion Exception");
catch (Exception expect){}
的這兩個捕獲異常。我會建議捕捉你正在尋找的異常,而不是通用的異常。
+0
+1爲JUnit 4方法。這是迄今爲止我見過的最常見的,很好的自我記錄。 –
相關問題
- 1. JUnit如何處理單元測試?
- 2. 使用junit進行單元測試4.10
- 3. 使用Eclipse進行單元測試 - JUNIT
- 4. 如何使用jUnit測試已處理的異常?
- 5. 測試 「處理的異常」 的JUnit
- 6. JUnit的異常處理測試
- 7. 單元測試的IOError異常處理
- 8. MSTest單元測試 - 處理異常
- 9. 單元測試異常處理
- 10. 如何使用PHPUnit對異常進行單元測試?
- 11. 使用Hibernate 4進行轉換異常,同時使用Spring進行JUnit測試
- 12. 使用JUnit進行單元測試,無需XML配置的Spring批處理
- 13. 如何在Junit中測試ScheduledExecutorService異常處理?
- 14. 如何使用System.Net.Http.HttpClient處理異步異常並進行集成測試?
- 15. 如何用內部異常對代碼進行單元測試?
- 16. Junit異常測試
- 17. JUnit異常測試
- 18. Junit異常處理
- 19. 運行單元測試後未處理的Petrel異常
- 20. Java:使用Junit 3進行異常測試
- 21. 使用內部構造函數對第三方異常進行單元測試異常處理
- 22. 如何在運行時識別預期異常,同時進行單元測試?
- 23. 使用spock進行java單元測試的異常
- 24. 使用RequestFixture和Ratpack中的HandlingResult進行單元測試異常
- 25. 如何對異常進行單元測試?
- 26. 如何進行單元測試以覆蓋異常分支
- 27. 如何在junit中使用未捕獲的異常處理程序進行多線程測試?
- 28. powermockito - 測試異常處理
- 29. 在Android單元測試用例中的異常處理
- 30. 使用JUnit運行黃瓜測試時出現java.lang.NoClassDefFoundError異常
juint的版本? – dantuch
Duplicate of:http://stackoverflow.com/questions/785618/in-java-how-can-i-validate-a-thrown-exception-with-junit?rq=1 – Atif