Вопрос

У меня есть статический класс, который упаковывает некоторые нативные методы из winspool:

public static class WinSpool
{
     [DllImport("winspool.drv")]
     public static extern int OpenPrinter(string pPrinterName, out IntPtr phPrinter, IntPtr pDefault);
     ...
     //some more methods here
}

Я хотел бы издеваться над ними для модульного тестирования, но не смог найти шаблон для этого. (Все ли избегают статических классов?)

Это было полезно?

Решение

Да, статическим классом обычно является не одобряется в области модульного тестирования и насмешек . AFAIK нет фреймворка с открытым исходным кодом (например, Rhino Mocks ) не поддерживает макетирование статических классов

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

Другие советы

Microsoft разработала инфраструктуру Fakes для Visual Studio 2012 Ultimate, которая позволяет макетировать статические типы с помощью прокладок. Прокладки являются «поддельными» сборки, которые предоставляют делегаты для всех доступных извне методов. Затем вызовы направляются через фильтр событий, и там, где тест установил одного из своих делегатов, делегат обрабатывает вызов. Не то чтобы кто-то хотел поощрять статические типы, которые не обрабатываются посредством внедрения зависимостей. Предпочтительное направление состоит в том, чтобы отойти от необходимости использования прокладок и к использованию заглушек с использованием DI.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top