Моно и методы расширения с MonoDevelop 2.8.5 - PullRequest
1 голос
/ 17 декабря 2011

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

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 не одно и то же.)

1 Ответ

4 голосов
/ 17 декабря 2011

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

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

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

...