模拟静态类

时间:2009-12-01 03:06:23

标签: .net mocking static-classes

我有一个静态类,它包含来自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 个答案:

答案 0 :(得分:10)

是的,静态类通常是frowned upon in the field of unit testing and mocking。 AFAIK没有开源模拟框架(例如Rhino Mocks)支持静态类模拟

如果你绝对肯定地必须嘲笑静态课程,那么我担心你必须去Typemock,这不是免费的。

答案 1 :(得分:2)

Microsoft为Visual Studio 2012 Ultimate制作了一个Fakes框架,允许使用填充程序模拟静态类型。垫片是“假”组件,为所有外部可访问的方法提供代理。然后通过事件过滤器路由呼叫,并且只要测试设置了其委托之一,委托就会处理呼叫。并不是说有人想鼓励不通过依赖注入处理的静态类型。首选方向是为了需要垫片和使用DI来使用短柱。