2011-05-11 44 views
7

在此問題被標記爲重複之前,請閱讀它。 ;) 已經有幾個關於覆蓋工具的問題,但是這與通常的有點不同(我希望)。是否有某種'斷言'覆蓋工具(用於Java)?

根據wikipedia,有幾種不同類型的「覆蓋率」變化會影響術語「覆蓋率」的幾個不同方面。

這裏一個小例子:

public class Dummy { 
    public int a = 0; 
    public int b = 0; 
    public int c = 0; 

    public void doSomething() { 
     a += 5; 

     b += 5; 

     c = b + 5; 
    } 
} 

public class DummyTest { 

    @Test 
    public void testDoSomething() { 
     Dummy dummy = new Dummy(); 

     dummy.doSomething(); 

     assertEquals(10, dummy.c); 
    } 
} 

正如你可以看到,測試將有100%的線的覆蓋,現場「C」的價值主張將涵蓋這一領域也間接覆蓋字段'b',但是在字段'a'上沒有斷言覆蓋。 這意味着測試覆蓋了100%的代碼行,並確保c包含期望值,並且很可能b也包含正確的值,但a完全沒有被聲明,並且可能是完全錯誤的值。

所以......現在的問題是否有工具能夠分析(java)代碼並創建一個關於哪些字段/變量/沒有被直接和/或間接地由斷言覆蓋的報告?

(使用干將,而不是公共領域時,你會看到木屐()不叫,但嗯,這不是我想聽到的答案確定;))

+0

所以...你正在尋找某種工具做全面的資料流?這實際上是有用的,雖然我不知道任何副手。有+1。 – 2011-05-11 08:34:55

+0

是的,因爲我很懶惰;)我想要一些說我的東西,嘿,你忘了在YZ類中測試字段XY的值。 – 2011-05-11 08:52:58

回答

2

正如你可以看到,該測試將具有100%的線的覆蓋範圍,在字段「C」的值的斷言將覆蓋本領域和間接地也覆蓋場「b」,然而,在'a'領域沒有斷言。這意味着測試覆蓋了100%的代碼行,並確保c包含期望值,並且很可能b也包含正確的值,但a完全沒有被聲明,並且可能是完全錯誤的值。

嗯,「蓋」不幸的是意味着不同的事情不同的人......這的確測試練習的代碼行 100%,但它並不測試他們。

您要找的是mutation testing

看看Jester,它使用變異測試來報告代碼覆蓋率。

+0

如果有什麼值得讚揚的話,我會很高興知道它是什麼。 – 2011-05-11 13:33:16

+0

也許你在這裏有任何個人的敵人?我沒有發現任何反對意見,所以我認爲downvote也是不公平的。我會用我的一個贊成票來做到這一點。 – Ingo 2011-05-11 14:09:22

+0

投了票,謝謝你的信息,這看起來已經很有趣了,並且進入了我所尋找的方向。非常感謝。我仍然不會將它標記爲答案,只是爲了看看還有什麼輸入。 – 2011-05-12 06:17:08

0

請經過下面這個鏈接

Compatibility Test Tools

+0

mmh,感謝您的鏈接。如果我理解正確,規範trac工具將檢查'單元測試'經過了多少'JDK斷言'的'覆蓋'。然而,我的問題是,如果有一種工具可以幫助查找某些在測試期間被修改的字段是否缺少斷言。 – 2011-05-11 08:32:17

1

「測試範圍」有數百個定義,其中COTS工具最多隻能處理很少的幾個。 (我的公司構建測試覆蓋工具,以便跟蹤這種事情)。請參閱this lecture on test coverage以獲得有趣的概述。

我聽到的最接近的定義是數據覆蓋;取決於你的定義: - {它告訴你每個數據項在執行期間已經被寫入和讀取。講座談到驗證寫和閱讀已被行使作爲一種特殊情況。

我不知道數百個定義的核心,但你可能已經發明瞭一個:數據覆蓋限於斷言。

+0

感謝您提供的信息豐富的輸入,我想我的問題仍然太模糊......它不應該侷限於「斷言」,它是我的術語說實際值是根據預期值進行驗證的。該工具應提供有用的信息,說明在測試中「使用」過的內部狀態/字段/返回值,但其實際值未根據預期值進行驗證。 pppf ...聽起來相當複雜,希望這是可以理解的...... – 2011-05-12 06:29:07

+0

如果您只關心在測試中「使用」了哪些狀態/字段/值,那麼您需要數據覆蓋。 ...所有的測試覆蓋工具都很複雜;你想提取關於發生的事情的信息而不會破壞代碼並且沒有很多工作。基本上你需要儀器來收集感興趣的數據;這種分解必須是適度的運行成本,而不是破壞程序功能,而且必須解釋結果。不,我不認爲你會找到這樣一個現成的工具。這只是一個願望,或者是您的任務的基本要求? – 2011-05-12 17:05:27

+0

這是一個願望,這個想法是在編寫單元測試並根據已執行的代碼行檢查其覆蓋範圍時產生的。找了一下後,我沒有發現任何與我的想法相符的東西,我只是想知道是否有人已經完成了這項工作;)感謝您的反饋。 – 2011-05-13 07:22:15

0

在Java中有Assertions如果這是你在找什麼。

,看看有多少代碼已經覆蓋有,您可以使用此工具是一些例子: cobertura clover