回答
如果你想看到每個成功斷言的輸出,另一個不需要外部依賴或源代碼的簡單方法就是定義你自己的Assert類,它將所有方法委託給標準的JUnit Assert類以及日誌成功的斷言(失敗的斷言將像往常一樣由JUnit類報告)。
然後,您將從「org.junit.Assert」=>「com.myco.test.Assert」對您的測試類運行全局搜索和替換,這應該修復所有常規和靜態導入語句。
你也很容易再你的方法遷移到更安靜的就是更好陣營,改變包裝類只報告每個測試或每類傳入斷言的總#等
JUnit的javadoc的不幸說,只有失敗的斷言被記錄(http://junit.sourceforge.net/javadoc_40/index.html)
所以現在看來,這是不可能的
我敢肯定,你可以創建一個自定義的TestRunner是這樣做的。我們在我們自制的單元測試框架(NUnit的一個克隆)中得到了類似的結果。
哦,等等 - 現在我再次讀你的問題,如果你真的想要輸出每個成功的斷言,你將不得不深入探討管道。 TestRunner只會爲每個測試用例的開始/結束調用一次,所以它會計數通過並且失敗測試,而不是斷言。
這對我來說並不是什麼大問題,因爲我一般傾向於每個測試一個斷言。
很難做到。所有的assert方法都是類Assert的靜態成員,這意味着RunNotifier(計數成功和失敗的測試)不可及。
如果您不想避免不恰當的破解:從JUnit獲取源代碼,在運行測試時將它們修補以將當前通知程序存儲在Assert的靜態字段中,以便靜態方法可以將成功的斷言報告給此通知程序。
你能考慮嗎?
1)下載JUnit的源
2)修改類org.junit.Assert做你正在尋找
您可以使用AOP(與Spring還是AspectJ)上的所有斷言定義切入點任何修改方法在junit.framework.Assert類中。使用spring可以在返回通知後實現自己的類(http://static.springframework.org/spring/docs/2.5.x/reference/aop.html#aop-advice-after-returning)僅在assert方法通過時纔會調用它(否則會引發異常:junit.framework.AssertionFailedError )。在您自己的類中,您可以實現一個簡單的計數器,在最後打印。
你在獲得成功嗎?通常情況下,唯一有趣的說法是那些失敗的斷言很感興趣。
作爲一個狂熱的JUnit奉獻自己,我嘗試做的輸出儘可能安靜地進行測試,因爲它在不通過任何事情的情況下提高了信噪比。最好的測試運行是所有事情都經過並且沒有從標準輸出中窺視的一個測試。
您可以隨時在單元測試中工作,直到成功並運行「grep Assert test.java | wc -l「。:-)
我不我認爲,JUnit的目標是計算匹配的斷言或打印出更詳細的信息。 如果測試是原子性的,那麼您會在那裏獲得大部分信息。所以我會檢查我的測試。
你也可以在JUnit中建立一個LogFile。這是可能的,但它會降低測試執行性能...
添加一些信息,當我想讓JUnit在這個問題上變得更加冗長和迷迷糊糊時,對我會有所幫助。也許它將在未來幫助其他測試人員。
如果從螞蟻運行JUnit,並希望看到什麼樣試驗進行的同時,您可以添加以下到您的任務:
<junit showoutput="true" printsummary="on" enabletestlistenerevents="true" fork="@{fork}" forkmode="once" haltonfailure="no" timeout="1800000">
注意showoutput,printsummary和enabletestlistenerevents是什麼幫助,不是其他任務屬性。如果設置了這些,你會得到輸出如下:
Running com.foo.bar.MyTest
junit.framework.TestListener: tests to run: 2
junit.framework.TestListener: startTest(myTestOne)
junit.framework.TestListener: endTest(myTestOne)
junit.framework.TestListener: startTest(myTestTwo)
junit.framework.TestListener: endTest(myTestTwo)
Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0.495 sec
這是對我有用的,當我測試超時,我不知道哪個測試實際花費的時間太長,並且測試得到,因爲取消時間到了,他們不幸運行。
- 1. Gprof可以更詳細嗎?
- 2. 我可以爲app_fax獲取更詳細的ami事件嗎?
- 3. JUnit詳細輸出
- 4. 我可以在ListView的詳細模式下顯示鏈接嗎?
- 5. 我可以在ListView的詳細模式下顯示鏈接嗎?
- 6. 有人可以向我詳細解釋'this'的用法嗎?
- 7. 我可以讓這個jQuery更短嗎?
- 8. 我可以讓maven-assembly-plugin更快嗎?
- 9. 我可以在Netbeans 7.3中獲得「更好」的詳細輸出嗎?
- 10. 螞蟻junit任務不報告詳細
- 11. 如何讓我的代碼更少詳細
- 12. 我可以更改MVC使用的文件的名稱,以在我的網格中顯示詳細數據嗎?
- 13. JUnit可以模擬OutOfMemoryErrors嗎?
- 14. 我可以混合使用JUnit 3和JUnit 4嗎?
- 15. 如何爲Jmeter創建更詳細的結果消息Junit Sampler
- 16. CloudWatch可以提供服務器或elb的詳細信息嗎?
- 17. 有人可以詳細解釋Magentos索引功能嗎?
- 18. 從PyMel調用MEL腳本時可以報告更詳細的結果嗎?
- 19. 我可以讓div類可點擊嗎?
- 20. 詳細視圖SugarCRM可安裝更改
- 21. 使vim更詳細(使按鍵可見)
- 22. 我可以讓我的UiApp拖動嗎?
- 23. 我可以在PowerShell中獲得詳細的異常堆棧跟蹤嗎?
- 24. 什麼是IBM Worklight?任何人都可以向我詳細解釋一下嗎?
- 25. 我可以在manyToMany自動生成的模型中指定詳細名稱嗎?
- 26. Facebook API:我可以獲取有關用戶位置的詳細信息嗎?
- 27. 任何人都可以向我詳細解釋這個正則表達式嗎?
- 28. C#:我可以從CLR的未處理異常中獲取詳細信息嗎?
- 29. 我可以從CGI級別訪問TCP/IP數據包的詳細信息嗎?
- 30. 在TDD方法中,我們可以有詳細設計文檔嗎?
你爲什麼要這樣做?我總是試圖遵循沉默的規則(http://www.catb.org/~esr/writings/taoup/html/ch01s06.html#id2878450),這就是爲什麼我要求 – 2008-10-07 21:08:40
這可能是一種有用的方法看看是否有人「調整」測試用例,通過消除不適當的斷言來通過測試用例... – 2008-10-07 22:07:06