2015-10-17 166 views
1

在單元測試中檢查矩陣值的最佳方法是什麼?在單元測試中檢查矩陣值的最佳方法是什麼?

我有一個方法,在我的項目,這樣的事情:

int[][] getMatrix() 
{ 
    int[][] ans = new int[1][]; 
    ans[0] = new int[1]; 
    ans[0][0] = 0; 
    return ans; 
} 

我想單元測試這個類使用Visual Studio的標準測試引擎,所以我創建單元測試,這樣的事情:

[TestMethod] 
public void Test() 
{ 
    var result = getMatrix(); 
    int[][] correct = new int[1][]; 
    correct[0] = new int[1]; 
    correct[0] = 0; 
    Assert.AreEqual(correct.Length, result.Length); 
    for (int i = 0; i < correct.Length; ++i) 
    { 
     CollectionAssert.AreEqual(correct[i], result[i]); 
    } 
} 

所以,在這裏我寫了一個斷言檢查數量在兩個矩陣的行都是平等的,用於CollectionAssert檢查矩陣中的對應行也相同。

我不喜歡這段代碼 - 我確定有一些比較矩陣的標準方式,整個循環可能會以更簡短明瞭的方式進行重構。

那麼,在單元測試中檢查矩陣值的最好方法是什麼?

回答

1

MsTest BCL中沒有用於比較矩陣的內置解決方案。但是有幾個重載,它允許您使用自定義IComparer進行比較:(BTW CollectionAssert使用這些重載內部...)

class CollectionAssertComperator : IComparer 
{ 
    public int Compare(object x, object y) 
    { 
     CollectionAssert.AreEqual((ICollection)x, (ICollection)y); 
     return 0; 
    } 
} 

然後你可以簡單地使用它(它是一個可重複使用的解決方案)

CollectionAssert.AreEqual(correct, result, new CollectionAssertComperator()); 
+0

非常感謝,我喜歡這個解決方案! – alexeykuzmin0

相關問題