在单元测试中检查矩阵值的最佳方法是什么?
What is the best way of checking the matrix value in Unit test?
在单元测试中检查矩阵值的最佳方法是什么?
我的项目中有一个方法,是这样的:
int[][] getMatrix()
{
int[][] ans = new int[1][];
ans[0] = new int[1];
ans[0][0] = 0;
return ans;
}
我想使用 visual studio 标准测试引擎对此 class 进行单元测试,因此我创建了一个单元测试,如下所示:
[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 来检查矩阵的相应行是否也相等。
我不喜欢这段代码 - 我确信有一些按值比较矩阵的标准方法,并且整个循环可能可以用更简短和清晰的方式重构。
那么,在单元测试中检查矩阵值的最佳方法是什么?
MsTest BCL 中没有用于比较矩阵的内置解决方案。但是,有几个重载允许您使用自定义 IComparer
进行比较:(顺便说一句 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());
在单元测试中检查矩阵值的最佳方法是什么?
我的项目中有一个方法,是这样的:
int[][] getMatrix()
{
int[][] ans = new int[1][];
ans[0] = new int[1];
ans[0][0] = 0;
return ans;
}
我想使用 visual studio 标准测试引擎对此 class 进行单元测试,因此我创建了一个单元测试,如下所示:
[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 来检查矩阵的相应行是否也相等。
我不喜欢这段代码 - 我确信有一些按值比较矩阵的标准方法,并且整个循环可能可以用更简短和清晰的方式重构。
那么,在单元测试中检查矩阵值的最佳方法是什么?
MsTest BCL 中没有用于比较矩阵的内置解决方案。但是,有几个重载允许您使用自定义 IComparer
进行比较:(顺便说一句 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());