2016-04-25 149 views
1

使用多線程時,我們試圖用一對夫婦的代碼覆蓋率插件爲我們的春天項目(EclEmma,三葉草)的代碼覆蓋率%是錯誤的。JUnit和春天 - 在測試

兩者都提供有關覆蓋率%錯誤的結果。

的測試是使用Spring的taskExecutor的(線程池)。

所有任務執行的線程執行的代碼不能算作覆蓋。

任何想法,爲什麼?

+0

你能否提供一個這樣的代碼和測試的例子? – Godin

回答

-1

我剛剛打了同樣的問題,但考慮這個問題,JUnit的/ EclEmma怎麼能知道或跟蹤上並行運行多個/其他線程執行的代碼?我的假設是,它只適用於「主要/當前」線程。單元測試以及覆蓋的正確方法是將[作爲方法]隔離並在單獨的測試中測試在其他線程上執行的代碼。一種說服自己的方法......當JUnit在調試模式下運行時嘗試突破。這並不「起作用」,或者......在斷點處跨越,你可能會發現你不會在下一條指令結束,或者/或者另一個線程上的代碼已經完成很久,並且測試已經完成。

+0

「我的假設是,它只適用於'main/current'線程。」這是錯誤的假設:[JaCoCo](http://www.eclemma.org/jacoco/index.html)(EclEmma使用的覆蓋引擎)不會對線程進行任何區分,並且可以收集多個線程提供的覆蓋率。 「怎麼樣?」 - 有點偏離主題。我不熟悉Spring的taskExecutor,只會列出幾個可能的常見原因:類文件中沒有調試信息,在運行時修改類,...(http://www.eclemma.org/jacoco/trunk/doc/ faq.html)深入瞭解這個問題需要一個例子(複製者)。 – Godin

相關問題