2010-06-06 67 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)