JUnit測試用例中「失敗」的實際用途是什麼?JUnit測試用例中「失敗」的實際用途是什麼?
回答
,我認爲它是有用的一些情況:
- 標誌着一個測試,是不完整的,所以它失敗,並警告你,直到你可以完成它
- 確保拋出一個異常:
try{ // do stuff... fail("Exception not thrown"); }catch(Exception e){ assertTrue(e.hasSomeFlag()); }
注:
由於JUnit4,有是測試一個異常被拋出一個更優雅的方式: 使用註釋@Test(expected=IndexOutOfBoundsException.class)
然而,這不會,如果你的工作還想要檢查異常,那麼你仍然需要fail()
。
我認爲通常的用例是在負面測試中沒有異常時調用它。
類似下面的僞代碼:
test_addNilThrowsNullPointerException()
{
try {
foo.add(NIL); // we expect a NullPointerException here
fail("No NullPointerException"); // cause the test to fail if we reach this
} catch (NullNullPointerException e) {
// OK got the expected exception
}
}
如果您沒有在catch塊中檢查某些內容,則可以使用@ExpectedException(NullNullPointerException.class)方法註釋來聲明您期望有一種特殊類型的異常。 – FrVaBe 2010-11-17 08:10:07
可以說你是爲當被測試的代碼應該拋出一個異常
try{
bizMethod(badData);
fail(); // FAIL when no exception is thrown
} catch (BizException e) {
assert(e.errorCode == THE_ERROR_CODE_U_R_LOOKING_FOR)
}
這是我如何使用失效方法的-ve流程編寫測試用例。
有你的測試用例可以在
- 最終順利通過三種狀態:被測試函數執行成功,返回預期
- 不傳遞 數據:被測函數成功執行,但不符合預期 返回的數據
- 失敗:該函數沒有成功執行,這是不是
意爲(與期望發生異常的負面測試案例不同) 發生)。
如果您使用的是eclipse,那麼三種狀態分別由綠色,藍色和紅色標記表示。
我對第三種情況使用失敗操作。
例如:public Integer add(integer a,Integer b){return new Integer(a.intValue()+ b。的intValue())}
- 傳遞情形:a =新基於整數(1)中,b =新的整數(2)和該函數返回3
- 不傳遞情形:a =新基於整數(1)中,b =新的整數(2)和函數返回比3
- 失敗案例等SOEM值:A = NULL,b = null,並且函數拋出
如果你看看JUnit的源代碼,你會發現斷言使用'fail()'。 – 2016-06-02 19:42:33
我在的情況下使用它在那裏的東西一個NullPointerException可能在我的@Before方法中出錯了。
public Object obj;
@Before
public void setUp() {
// Do some set up
obj = new Object();
}
@Test
public void testObjectManipulation() {
if(obj == null) {
fail("obj should not be null");
}
// Do some other valuable testing
}
是的,測試前提條件很好。但是,如果您想確保'@ Before'方法成功,則最好直接在該方法中檢查它。作爲獎勵,至少JUnit和TestNG甚至會報告來自'@ Before' /'@ After'方法的錯誤的不同失敗,所以可以看到問題不在測試本身。 – sleske 2016-06-17 11:51:06
我舉個例子,使用fail()
表明,尚未完成(它發生)的測試;否則,他們會表現出成功。
這可能是由於我不瞭解NUnit中存在的某種不完整()功能。
簡單地使用:
org.junit.Assert.fail("Exception expected");
最重要的使用情況很可能是異常檢查。
雖然junit4包含expected element用於檢查是否發生異常,但它好像不是新的junit5的一部分。使用fail()
而不是expected
的另一個優點是可以將它與finally
結合使用,從而允許測試用例清理。
dao.insert(obj);
try {
dao.insert(obj);
fail("No DuplicateKeyException thrown.");
} catch (DuplicateKeyException e) {
assertEquals("Error code doesn't match", 123, e.getErrorCode());
} finally {
//cleanup
dao.delete(obj);
}
正如另一條評論所述。有一個測試失敗,直到你可以完成實施它聽起來也是合理的。
- 1. JUnit測試用例失敗
- 2. JUnit測試用例失敗
- 3. Junit測試:什麼是失敗?
- 4. JUnit測試失敗案例
- 5. 測試用例即使實際失敗也不會失敗
- 6. 爲什麼這個JUnit測試用例失敗?
- 7. toContain()的實際用途是什麼?
- 8. 什麼是System.Transactions的實際用途?
- 9. Socket.ExclusiveAddressUse的實際用途是什麼?
- 10. Android NDK的實際用途是什麼?
- 11. array_diff_uassoc的實際用途是什麼?
- 12. jQuery的實際用途是什麼?
- 13. 如何在測試用例失敗時發送JUNIT失敗?
- 14. JUnit測試失敗
- 15. JUnit測試失敗
- 16. JUnit測試失敗
- 17. JUnit測試失敗
- 18. MongoDB實例失敗測試
- 19. Ant JUnit測試用例失敗報告未報告測試用例名稱
- 20. 忽略測試用例中的聲明失敗(JUnit)
- 21. 在IntelliJ IDEA中執行單個JUnit測試用例失敗
- 22. 在JUnit測試中使用舊實例
- 23. 是否當運行測試用例時,jUnit測試用例實際上在數據庫中插入數據
- 24. Spring MVC應用程序Junit測試用例失敗
- 25. 爲什麼我的junit測試在此代碼中失敗?
- 26. expectationForPredicate失敗測試用例
- 27. 測試用例失敗fwrite()
- 28. 如何覆蓋失敗的JUnit測試用例的行爲
- 29. 的Cobertura與Ant腳本的JUnit測試用例失敗
- 30. Selenium JUnit測試失敗
請考慮這篇博文中關於失敗vs預期註釋的相對優點:http://blog.jooq.org/2016/01/20/use-junits-expected-exceptions-sparingly/ – lbalazscs 2016-02-05 22:16:59
@sleske「如果你還想要檢查異常,那麼你仍然需要失敗()「 - 不行。 ExpectedException是這樣的,請參閱https://github.com/junit-team/junit4/wiki/exception-testing – kraxor 2017-11-15 12:22:53
@kraxor:真的,我在寫答案時不知道它(它可能甚至不是然後)。 – sleske 2017-11-15 22:39:57