我目前正在開發一個C#P/invoke包裝到屬於我產品一部分的DLL。我沒有使用C#的經驗,這是我所做的第一個重要的C#編碼。我非常清楚,我對語言的細節和習慣用法缺乏瞭解。如何通過爲AreEqual添加新的靜態過載來擴展NUnit Assert類?
我的問題涉及到我正在使用NUnit編寫的單元測試。我需要比較double[]
變量的值。如果我使用Assert.AreEqual(...)
來做到這一點,那麼將比較這些值的完全相等。不過,我想比較一下寬容。標量實數值有AreEqual()
過載,允許參數爲delta
。但是,我一直無法找到數組的等價物。我錯過了明顯的東西嗎?
在我已經用下面的代碼解決了這個問題的時刻:
class Assert : NUnit.Framework.Assert
{
public static void AreEqual(double[] expected, double[] actual, double delta)
{
AreEqual(expected.Length, actual.Length);
for (int i = 0; i < expected.Length; i++)
{
AreEqual(expected[i], actual[i], delta);
}
}
}
雖然這似乎是工作,我不知道是否有可用的清潔的解決方案。特別是我擔心的是,爲我的派生類使用相同的名稱,不僅風格不佳,而且會導致未預料到的問題。
我想要使用擴展方法,但我知道它們只有在有擴展類的實例時纔可行。當然,我只會在Assert
課上調用靜態方法。
對不起,如果這看起來有點模糊,但我的直覺告訴我,我沒有這樣做最好的方式,我想知道如何做到這一點。
你嘗試[擴展方法( http://msdn.microsoft.com/en-us/library/bb383977.aspx)? –
@Ofer澤裏格柯而我給你的+1我記得擴展方法,而定義的靜態,只能在實例工作。 – dowhilefor
那麼作爲現在看來,是無法做到的(除非你實現包裝類,大量的艱苦和醜陋的工作)。參見[此](http://stackoverflow.com/questions/249222/can-i-add-extension-methods-to-an-existing-static-class/435617#435617)和[此](HTTP:// madprops.org/blog/static-extension-methods/)。 –