【问题标题】:What is the best way of checking the matrix value in Unit test?在单元测试中检查矩阵值的最佳方法是什么?
【发布时间】:2016-01-16 05:53:05
【问题描述】:

在单元测试中检查矩阵值的最佳方法是什么?

我的项目中有一个方法,如下所示:

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 来检查矩阵的相应行是否也相等。

我不喜欢这段代码 - 我确信有一些标准的方法可以按值比较矩阵,并且整个循环可能可以以更简洁明了的方式重构。

那么,在单元测试中检查矩阵值的最佳方法是什么?

【问题讨论】:

    标签: c# unit-testing matrix mstest assert


    【解决方案1】:

    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());
    

    【讨论】:

    • 非常感谢,我喜欢这个解决方案!
    猜你喜欢
    • 1970-01-01
    • 2019-04-09
    • 2010-09-08
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多