Microsoft Fakes テスト フレームワークを使用しています。変更できない「レガシー」コードのためにシム/モルアプローチを使用する必要があるため、これを回避する方法はあまりありません。ソースのないベンダーのコードであり、テストを考慮せずに書かれています。だから私は、TypeMock (高価)、Telerik の JustMock (高価)、または Microsoft の Fakes の 3 つの可能なフレームワークで立ち往生しています。VS Ultimate は既にあるので、偽物を選択します。ほとんどの人は、インターフェイスや依存性注入の使用をサポートするために何らかの方法でコードを書き直したり変更したりすることを提案する必要があると感じているため、前もってお伝えしますが、これはオプションではありません。
私が抱えている問題の 1 つは、偽造しようとしているライブラリが巨大であり、32 ビット (fakes.x86.exe) ではなく 64 ビット バージョンの fakes.exe を使用する必要があることです。 32 ビット アプリのメモリ制限。
2 つ目の問題は、v4.5 フレームワークを使用してフェイク ライブラリをコンパイルする必要があることです。文書化されていませんが、コマンドラインから可能です。その理由は、v4.5 で System.Collections.Generic に IReadOnly* インターフェイスが追加され、ライブラリがそれらを使用するためです。v4 でコンパイルすると、予想どおり、型が見つからないことを示すエラーがスローされます。
問題は、Visual Studio が常に x86 バージョンと v4.0 フレームワークを使用していて、それをオーバーライドする方法が見つからないことです。64ビットとv4.5フレームワークを使用する方法を知っている人はいますか? 私の現在の考えは、ビジュアルスタジオの組み込みのものを使用せず、コマンドラインを使用してファイルを手動で参照することです。次に、dll を更新するたびに、手動で再作成し、参照を更新します。このファイルは頻繁に更新されるわけではないため、更新される可能性があります。
フェイク ライブラリを手動で生成するために使用するコマンド ラインは次のとおりです (誰かがこれを便利だと思うかもしれません)。
"c:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\fakes\fakes.exe" <assembly> /tfv:v4.5
help コマンドは、v2、v3.5、および v4 が tfv の可能なオプションであることを示しているだけですが、キックのために v4.5 を試しました。
アプリのアーキテクチャをCPUではなくx64に強制しようとしましたが、実行されたfakes.exeに変更はありません。テストのために .csproj ファイルを調べましたが、変更はありません。.csproj ファイルを調べたところ、fakes.exe が表示され、v4.5 に変更されたフレームワークを使用するように指示され、Visual Studio で開かれ、正常にコンパイルされました。正常にコンパイルされた、fakes コマンド ラインを使用しました。プロジェクトの .fakes ファイルには、コンパイラのバージョンを定義できる属性がありますが、v4.5 に設定しても機能しませんでした。Visual Studio の v4 から v4.5 へのバージョン変更により、アセンブリ参照も変更されたと想定しています。私の次の試みは、テンプレート プロジェクトが見つかったら、それを変更してみることです。