2016-09-20 74 views
0

我想測試(證明)我的單元測試是否實際測試它需要的一切。具體如何檢查我是否錯過了某些斷言?驗證通過打破代碼的單元測試

就拿這個代碼:

int AddPositives(int a, int b) 
{ 
    if (a > 0 && b > 0) 
     return a + b; 
    return -1; 
} 

而且有人寫了單元測試,像這樣:

[Test] 
    public void TestAddPositives() 
    { 
     Assert.AreEqual(3, AddPositives(1, 2)); 

     AddPositives(0, 1); 
    } 

顯然斷言在這裏錯過了,你可能趕上在代碼審查。但是,你會如何自動捕捉這個?

那麼有沒有什麼東西可以打破測試代碼的目的,以檢測缺失的斷言?檢查字節碼並更改常量並刪除代碼以檢查是否可以更改單元測試失敗的情況。

+0

。您將不得不查看代碼,然後生成所有要測試的用例。 – Nkosi

+1

代碼覆蓋率可能會幫助您找到代碼中未被單元測試覆蓋的點。但是,您仍然需要查看他們生成的報告。再次,這些工具只能幫助您完成審查過程。就我所知,沒有自動過程。 – Alp

回答

0

一些代碼覆蓋工具,如NCrunch(優秀但不是免費)將註釋您的代碼行以顯示測試是否擊中它們。

在你給NCrunch的例子中,會在「return -1;」旁邊顯示一個小黑點。線。這將表明沒有現有的測試通過該行代碼,因此未經測試。

這不是完美的,但是因爲你仍然可以編寫一個測試,而不會聲稱它返回-1,所以你不能假設,因爲你有100%的覆蓋率,你寫了所有的有意義的測試所以它可以告訴你,返回-1絕對沒有進行單元測試,但它不會告訴你,你沒有自動測試邊界條件(例如檢查a = 0時會發生什麼)