0

Unity を新しい Fakes フレームワーク (以前の pex & mol) で快適に動作させるのに問題があります。

Unity インターセプト ライブラリの偽物を作成しようとすると、デバッグ時に単体テストが正常に実行されましたが、

InvalidProgramException - 共通言語ランタイムが無効なプログラムを検出しました。

問題はなぜですか?デバッグとリリースで動作が異なるのはなぜですか? 単体テストはデバッグ時に合格しますが、代わりに実行することを選択すると上記の例外で中断します。

4

2 に答える 2

1

Unity のふりをしているのなら、それは間違っています。Unity を偽造する必要があるという事実は、Unity をService Locator (アンチパターン)として悪用していることを意味します。代わりに、アプリケーション内から Unity を呼び出すのではなく、 Composition Root内でのみ使用してください。これにより、Unity を偽造する必要がまったくなくなります。

プログラミングの直感ルールを常に覚えておいてください。

于 2013-03-16T11:21:13.187 に答える
0

私が推測しなければならなかった場合 (インターセプトと偽物を個人的に組み合わせたことはありません)、IL レベルのものをいじっている 2 つのフレームワークがあり、うまく終わらないと言います。

Fakes は (ここで怪しげな記憶から) 偽造しているアセンブリの複製された "shim Filled" バリアントを作成することで機能し、ユニティ インターセプトはインターセプト ポイントで IL 織り込みを行います。 ILの無効なシーケンスが作成されました。

それを修正しますか?うーん...インターセプトを実行しているアセンブリで Fakes を使用しないでください。そのような場合は、より伝統的なモッキング フレームワークに依存してください。

于 2013-03-15T22:21:03.030 に答える