我在一个包含System.Core和构建目标Mono / .NET 3.5的项目中编写了一个MD 2.8.5的单元测试。我非常喜欢新的NUnit的Assert.Throws,因此决定为它编写一个扩展方法。我创建了一个新文件,其中包含与测试相同的命名空间中的内容。任何人都可以看到我的错误吗?
public delegate void TestDelegate();
public static class AssertThrows
{
public static T Throws<T>(this Assert assert, TestDelegate td)
where T : Exception
{
try
{
td();
}
catch(T e)
{
return e;
}
catch
{
throw new AssertionException("Wrong exception type.");
}
throw new AssertionException("Did not throw an error.");
}
}
MonoDevelop通过代码完成“看到”扩展方法。但是,编译器会报告:
Performing main compilation...
/Users/shamwow/dev/EngineTests.cs(19,37): error CS0117:
`NUnit.Framework.Assert' does not contain a definition for `Throws'
/Applications/MonoDevelop.app/Contents/MacOS/lib/monodevelop/AddIns/NUnit/nunit.framework.dll (Location of the symbol related to previous error)
Build complete -- 1 error, 0 warnings
(我知道MD和Mono不一样。)
答案 0 :(得分:4)
我假设您正在尝试使用它:
Assert.Throws<FooException>(() => ...);
扩展方法不起作用 - 它们似乎是扩展类型上的实例方法。由于您没有Assert
的实例,因此无法像这样调用您的扩展方法。