質問
winspoolのネイティブメソッドをラップする静的クラスがあります:
public static class WinSpool
{
[DllImport("winspool.drv")]
public static extern int OpenPrinter(string pPrinterName, out IntPtr phPrinter, IntPtr pDefault);
...
//some more methods here
}
単体テストのためにそれらをモックしたいのですが、このパターンを見つけることができませんでした。 (誰もが静的クラスを避けていますか?)
解決
はい、静的クラスは通常単体テストとモックの分野で嫌われている。私の知る限り、オープンソースのモックフレームワーク( Rhino Mocks など)は静的クラスのモックをサポートしています
静的クラスを絶対的かつ積極的にモックする必要がある場合は、 Typemock にアクセスする必要があると思います。無料ではありません。
他のヒント
Microsoftは、Visual Studio 2012 Ultimate用のFakesフレームワークを作成しました。これにより、シムを使用して静的型をモックできます。シムは「偽物」ですすべての外部からアクセス可能なメソッドのデリゲートを提供するアセンブリ。その後、呼び出しはイベントフィルターを介してルーティングされ、テストがデリゲートの1つをセットアップした場所で、デリゲートが呼び出しを処理します。依存性注入によって処理されない静的型を奨励したいという人はいません。望ましい方向は、シムの必要性のために離れて、DIを使用するスタブの使用に向かって移動することです。
所属していません StackOverflow