MS Test是否提供默认值等于比较?

时间:2010-06-06 10:12:38

标签: c# .net unit-testing testing equality

我想测试一下

int orderId = myRepository.SubmitOrder(orderA);

orderB = myRepository.GetOrder(orderId);

Assert.AreEqual(orderA, orderB); // fail

显然我需要在这里进行值比较,但我不想为了测试而为我的所有类提供重写的Equals实现(在其余部分中它不会有任何用处)应用程序)。

是否有提供的通用方法只使用反射检查每个字段?或者如果没有,可以自己编写吗?

编辑:因为看起来人们有点忽略了这一点。我不想写自己的比较逻辑。这将需要数百行额外代码。我正在寻找类似通用的东西

bool ContainSameValues<T>(T t1, T t2)

递归使用反射来提取T中所有值的方法。

进一步编辑:由于没有出现任何内置支持来执行此类操作,您可以看到我(失败)尝试编写自己的here

3 个答案:

答案 0 :(得分:1)

最简单的事情就是自己比较“原始”字段:

Assert.AreEqual(orderA.ID, orderB.ID);    
Assert.AreEqual(orderA.CustomerID, orderB.CustomerID);
Assert.AreEqual(orderA.OrderDate, orderB.OrderDate);

答案 1 :(得分:0)

由于Assert类是静态的,因此无法在其上创建扩展方法(因为需要实例)。但是,为什么不为Assert类创建一个包装器,您可以在其中执行自定义断言?

e.g:

public static class MyAssertions
{
    public static void AreOrdersEqual(Order a, Order b)
    {
        if (!OrdersAreEqual) // your comparison logic here
           Assert.Fail("Orders arent equal");           
    }
}

然后在你的测试中:

MyAssertions.AreOrdersEqual(orderA, orderB)

答案 2 :(得分:-2)

您必须在Order class.method中实现IComparable(或ICompare?)。