[英]Extension method to compare two objects for unit testing
我想寫一個擴展方法來比較兩個對象的某些屬性。 我寫了這段代碼:
public static void AreTwoObjectsEqual(this Assert asr, object Actual, object Expected, List<string> FieldsMustCheck)
{
foreach (string item in FieldsMustCheck)
{
if (Actual.GetType().GetProperty(item) == null || Expected.GetType().GetProperty(item) == null)
{
throw new Exception("Property with name : " + item + " not found in objects ");
}
var ActualPropertyValue = Actual.GetType().GetProperty(item).GetValue(Actual, null);
var ExpectedPropertyValue = Expected.GetType().GetProperty(item).GetValue(Expected, null);
if (ActualPropertyValue != ExpectedPropertyValue)
{
throw new AssertFailedException("Test failed for propery : " + item);
}
}
}
當我要構建項目時,出現此錯誤:
'Microsoft.VisualStudio.TestTools.UnitTesting.Assert':靜態類型不能用作參數
誰能幫助我消除此錯誤。
好吧,編譯器錯誤消息很清楚: Assert
是一個靜態類,因此您不能將其用作擴展方法的參數類型。 老實說,目前尚不清楚為什么要這么做。 如果您希望能夠使用Assert.AreTwoObjectsEqual
,那么您就不能這樣做-擴展方法旨在模擬實例方法,而不是其他類型的靜態方法。
我懷疑您應該只創建自己的靜態類,例如MoreAssert
,並使其成為普通的靜態方法:
public static class MoreAssert
{
public static void AreEqualByProperties(object expected, object actual,
List<string> propertyNames)
{
...
}
}
參數名稱已更改為符合.NET命名約定。 我強烈建議您也將camelCase
名稱用於局部變量。 我還對參數進行了重新排序,使其與其他斷言一致。
因此,您只需致電:
MoreAssert.AreEqualByProperties(...);
您也可以考慮使用params string[] propertyNames
代替List<string> propertyNames
來簡化調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.