IUnityContainer をどのようにモックしますか?
-
19-08-2019 - |
質問
Moq 3.0を使用してIUnityContainerをモックしようとしています
BadImageFormatException が発生しますが、デバッグ時には発生しません。一見すると、この問題に遭遇したのは私だけではありません。
そしてそれは Moq に登録された問題です
誰かが解決策を見つけたかどうか知りたいのですが...私が見つけた最も近いのは、Roy Osherove による RhinoMock を使用する素晴らしいソリューションです
でも私はモックが大好きです!したがって、Rhino Mock に切り替える必要はあまりありませんが、必要に応じて切り替えます。
前もって感謝します!
解決
あなたはしません。
コンテナをモックする唯一の理由は、コンテナを渡す場合です。それはアンチパターンです。
代わりに、アプリケーションのエントリポイントでオブジェクトグラフ全体を作成するか、コンポジションのルート。
その場でインスタンスを作成する必要がある場合は、自動ファクトリ。
テストのために、テスト中のオブジェクトを構築してモックオブジェクトをコンストラクタに渡すか、テストで新しいコンテナを作成してモックオブジェクトを登録できます。
他のヒント
IUnityContainer、ala この投稿?彼はRhinoMocksを扱っていますが、この問題はMoqのCastleの内部使用に関連していると思うので、この方法で問題を解決できるかもしれません。
本格的なモックオブジェクトが必要ですか?Fake を実装するだけで済むでしょうか?つまり、IUnityContainer インターフェイスのテスト インスタンス化を実装し、対話する必要があるメソッドをオーバーライドします。
私は、モック オブジェクト ライブラリがあるのだから、システム内のすべての依存関係を分離するためにそれを使用すべきだという考えに陥り、何度も罠にはまりました。多くの場合、もっと単純なことを行うことで、欲求不満のレベルがはるかに低くなり、望む結果が得られます。
この問題のためにIUnityContainer
をモックしないので、代わりにUnityContainer
の実際のインスタンスを使用します。理想的ではありませんが、コンテナーが適切に型を解決できることを確認することで登録をテストできます。
クラスの型を解決するためにそれを使用している場合は、モックしてIServiceLocator
を使用できます。さらに良いことに、コンテナにファクトリを登録し、代わりにそれを使用します。
Win x64でこれを実行していますか?このページをご覧ください。それは明らかに示唆しています。
この例外は、ダイナミックリンクライブラリ(.dllファイル)または実行可能ファイル(.exeファイル)のファイル形式が、共通言語ランタイムで予期される形式に準拠していない場合にスローされます。
また、このブログエントリでは、コンパイルフラグをAny CPUからx86に変更することを提案しているため、この問題が解決する可能性があります。 http://filips.net/archives / 2008/01/17 / getting-badimageformatexception-in-64-bit-windows /
編集:
この SOスレッド。ビルド構成マネージャーもご覧ください。