2015-10-17 117 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

相关问题