7

我有一个静态类,它包装了一些来自 winspool 的本机方法:

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

我想模拟它们进行单元测试,但找不到这种模式。(每个人都避免使用静态类吗?)

4

2 回答 2

11

是的,静态类在单元测试和模拟领域通常不受欢迎。AFAIK 没有开源模拟框架(例如Rhino Mocks)支持静态类模拟

如果您绝对肯定必须模拟静态类,那么恐怕您必须选择Typemock,它不是免费的。

于 2009-12-01T03:09:09.080 回答
2

Microsoft 为 Visual Studio 2012 Ultimate 制作了一个 Fakes 框架,允许使用 shim 模拟静态类型。Shim 是“假”程序集,为所有外部可访问的方法提供委托。然后通过事件过滤器路由调用,并且无论测试设置了它的一个委托,委托处理调用。并不是说任何人都想鼓励不通过依赖注入处理的静态类型。首选的方向是远离垫片的需要,而转向使用 DI 的存根。

于 2014-01-14T19:16:44.617 回答