我目前正在开发一个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/)。 –