Насмешка над статическим классом - PullRequest
7 голосов
/ 01 декабря 2009

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

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

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

Ответы [ 2 ]

10 голосов
/ 01 декабря 2009

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

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

2 голосов
/ 14 января 2014

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

...