2011-12-17 1 views
1

Я написал единичный тест с MD 2.8.5 в проекте, который включает System.Core и с целью сборки Mono/.NET 3.5. Мне очень нравится Assert.Throws нового NUnit, поэтому решил написать для него метод расширения. Я создал новый файл с этим в качестве своего содержимого в том же пространстве имен, что и в тесте. Может ли кто-нибудь увидеть мою ошибку?Моно и методы расширения с MonoDevelop 2.8.5

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 не то же самое.)

ответ

4

Я предполагаю, что вы пытаетесь использовать его так же, как:

Assert.Throws<FooException>(() => ...); 

методы расширения не работают так: они выглядят как пример методы расширенного типа. Поскольку у вас не будет экземпляра из Assert, вы не можете назвать свой метод расширения таким образом.

+0

Duh! Сегодня утром я обвиняю его в пред-кофе-мышлении. Спасибо, Джон! – realistschuckle