Насмешка над статическим классом
-
22-07-2019 - |
Вопрос
У меня есть статический класс, который упаковывает некоторые нативные методы из 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. Р>