我有一个静态类,它包含来自winspool的一些本机方法:
public static class WinSpool
{
[DllImport("winspool.drv")]
public static extern int OpenPrinter(string pPrinterName, out IntPtr phPrinter, IntPtr pDefault);
...
//some more methods here
}
我想模仿它们进行单元测试,但是找不到这种模式。 (每个人都避免使用静态类吗?)
答案 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来使用短柱。