вызов статического метода moqing для класса библиотеки c # - PullRequest
3 голосов
/ 09 марта 2010

Это кажется достаточно простой проблемой, но я не могу найти ключевые слова, чтобы повлиять на мои поиски.

Я пытаюсь выполнить модульное тестирование, удалив все объекты в вызове этого метода. Я могу сделать это для всех своих творений, кроме этого:

public void MyFunc(MyVarClass myVar)
{
    Image picture;
    ...

    picture = Image.FromStream(new MemoryStream(myVar.ImageStream));

    ...
}

FromStream - это статический вызов из класса Image (часть c #). Итак, как я могу реорганизовать свой код, чтобы макетировать это, потому что я действительно не хочу предоставлять поток изображений для модульного теста.

Ответы [ 4 ]

3 голосов
/ 09 марта 2010

Вы можете создать интерфейс IImageLoader. «Нормальная» реализация просто вызывает Image.FromStream, а ваша версия модульного теста может делать все, что вам нужно.

2 голосов
/ 09 марта 2010

Moq и большинство других фреймворков не поддерживают макетирование статических методов. Тем не менее, TypeMock поддерживает макетирование статических методов, и это может вас заинтересовать, если вы захотите приобрести его. В противном случае вам придется провести рефакторинг, чтобы интерфейс можно было смоделировать ...

1 голос
/ 20 марта 2010

Это может быть достигнуто с помощью Молей , инструментов Visual Studio 2010 Power Tools. Код Moles будет выглядеть следующим образом:

// replace Image.FromStream(MemoryStream) with a delegate
MImage.FromStreamMemoryStream = stream => null; 
1 голос
/ 09 марта 2010

Вы можете заключить статическую функцию в свойство типа Func, которое может быть установлено модульным тестом с макетом или заглушкой.

public class MyClass
{
    ..

    public Func<Image, MemoryStream> ImageFromStream = 
                                     (stream) => Image.FromStream(stream);


    public void MyFunc(MyVarClass myVar)
    {
        ...

        picture = ImageFromStream(new MemoryStream(myVar.ImageStream));

        ...
    }


    ..
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...