5

Moq 3.0 を使用して IUnityContainer をモックしようとしています

BadImageFormatException が発生しますが、デバッグ時には発生しません。見た目からして、この問題に遭遇したのは私だけではありません。

ここ

そして、そのMoqの登録済みの問題

ここ

誰かが解決策を見つけた場合、私はただ興味があります...私が見つけた最も近いものは、Roy OsheroveによるRhinoMockを使用する素晴らしい解決策です

ここ

しかし、私はMoqが本当に好きです!したがって、Rhino Mock に切り替える必要はありませんが、必要に応じて切り替える必要があります。

前もって感謝します!

4

5 に答える 5

4

あなたはそうしない。

コンテナをモックする唯一の理由は、コンテナを渡す場合です。これはアンチパターンです。

代わりに、アプリケーションのエントリポイントまたはCompositionRootでオブジェクトグラフ全体を作成する必要があります。

その場でインスタンスを作成する必要がある場合は、自動ファクトリを使用してください。

テストでは、テスト対象のオブジェクトを構築してモックオブジェクトをコンストラクターに渡すか、テストで新しいコンテナーを作成してモックオブジェクトを登録することができます。

于 2011-09-16T04:16:32.833 に答える
2

本格的なモック オブジェクトが必要ですか? Fake を実装するだけで済むでしょうか? つまり、IUnityContainer インターフェイスのテスト インスタンス化を実装し、対話する必要があるメソッドをオーバーライドしますか?

私はモック オブジェクト ライブラリを持っているので、システム内のすべての依存関係を分離するためにそれを使用する必要があると考えて、何度も罠に陥りました。多くの場合、より単純なことを行うと、欲求不満のレベルがはるかに低くなり、必要な結果が得られます.

于 2009-03-23T22:59:56.127 に答える
1

Rory Primrose によるこの投稿で、IUnityContainer の代わりに UnityBaseContainer または UnityContainer をモックしてみましたか? 彼はRhinoMocksを扱っていますが、問題はMoqのCastleの内部使用に関連していると思うので、この方法で問題を解決できるかもしれません.

于 2009-11-09T14:05:58.907 に答える
0

この問題のため、私はモックを作成しません。代わりにIUnityContainer、の実際のインスタンスを使用しますUnityContainer。理想的ではありませんが、コンテナーがタイプを適切に解決できることを確認することで、登録をテストできます。

クラス内の型を解決するためにそれを使用しているときにモックして使用できIServiceLocatorます。さらに良いのは、ファクトリをコンテナに登録して、代わりにそれを使用することです。

于 2009-11-08T13:41:05.043 に答える
0

これを Win x64 で実行していますか? このページを見てください。それは明確に示唆しています。

この例外は、ダイナミック リンク ライブラリ (.dll ファイル) または実行可能ファイル (.exe ファイル) のファイル形式が、共通言語ランタイムで期待される形式に準拠していない場合にスローされます。

また、コンパイル フラグを Any CPU から x86 に変更すると原因が改善される可能性があることを示唆するこのブログ エントリも見つかりました。http://filips.net/archives/2008/01/17/getting-badimageformatexception-in-64-bit-windows/

編集:

このSOスレッドもご覧ください。ビルド構成マネージャー内も見てください。

于 2011-09-18T08:28:42.080 に答える