2010-06-06 32 views
1

我想测试例如MS Test是否提供默认值等于比较?

int orderId = myRepository.SubmitOrder(orderA); 

orderB = myRepository.GetOrder(orderId); 

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

很显然,我需要一个在这里值的比较,但我不希望有提供重载的Equals实现对所有我的班纯粹是出于测试的目的(它在应用程序的其他部分不会有任何用处)。

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

编辑:因为看起来人们有点错过了观点。我不想写自己的比较逻辑。这将需要数百行额外的代码。我正在寻找像它循环使用反射拉出中的所有值T.

进一步编辑通用

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

方法:因为它不会出现有任何内置支持做这样的事情,你可以看到我的(失败)尝试写我自己的here

回答

1

最简单的办法是自己比较“原始”字段:

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

我有太多的课太多的领域为实现这一目标是可行的。 – fearofawhackplanet 2010-06-06 11:20:59

-2

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

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)