我想测试一下
int orderId = myRepository.SubmitOrder(orderA);
orderB = myRepository.GetOrder(orderId);
Assert.AreEqual(orderA, orderB); // fail
显然我需要在这里进行值比较,但我不想为了测试而为我的所有类提供重写的Equals实现(在其余部分中它不会有任何用处)应用程序)。
是否有提供的通用方法只使用反射检查每个字段?或者如果没有,可以自己编写吗?
编辑:因为看起来人们有点忽略了这一点。我不想写自己的比较逻辑。这将需要数百行额外代码。我正在寻找类似通用的东西
bool ContainSameValues<T>(T t1, T t2)
递归使用反射来提取T中所有值的方法。
进一步编辑:由于没有出现任何内置支持来执行此类操作,您可以看到我(失败)尝试编写自己的here
答案 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?)。