2011-12-07 9 views
0

私はMSTestでSilverlight 4プロジェクトの単体テストを開発しようとしていましたが、実行には問題があります。私のコードでは、いくつかの式(System.Linq.Expressions)を使用しており、通常の状況下でプログラムを実行すると正しく動作しています。しかし、ユニットテスト中にこのコードのいずれかが見つかった場合は、タイプ 'AppDomain'に 'MissingMethodException'が表示されます。Silverlight 4ユニットテスト。 mscorlibの間違ったバージョンがロードされる

「AppDomain」がmscorlib.dllで定義されているという事実を追跡しました。プログラムを正常に実行すると、mscorlib(Silverlight 4)のバージョン2.0.5.0が読み込まれ、ユニットテストバージョン2.0.0.0が読み込まれます。私のテストと通常のプロジェクトの両方の参照はすべて正しいので、MSTestが間違ったバージョンをロードしている理由を実際に理解できません。

MSTestまたはVSTestHostに実際に適切なバージョンのmscorlibをロードする方法はありますか? (2.0.5.0)

答えて

1

問題は、.NET Frameworkの1つのバージョンを使用してテストを実行し、もう1つは通常の状況でコードを実行することです。 Silverlightと.NETは互換性がありますが、Silverlightアセンブリを問題なく.NETから使用できることがよくあります(たとえVisual Studioが参照を警告しても)が、例外はいくつかあります。

たとえば、Silverlightコードをこのように実行すると、Silverlight UIクラスを使用できなくなります。 (任意のFrameworkElement、DependencyObject、Dispatcherなど)を使用する必要があります。私はAppDomainもこのカテゴリに該当することに驚くことはありません。

この問題を回避するには、上記のようなクラスに依存しないコードのみをテストするか、完全な.NETプロジェクトとしてソースコードをクロスコンパイルすることができます。後者は、あなたの非互換性を解決するものではありませんが、少し違うバージョンのコードをコンパイルして、コードをコンパイルして正常に実行させることができます。

mscorlibは他の.NETアセンブリと同じではなく、厄介なネイティブコード参照でいっぱいであり、目的のランタイム以外の意味のある方法では使用できません。

+0

hmmm ...これらのオプションは妥当ではないようです。なぜこれはとても難しいのですか? –

+0

あなたに同意しないと申し訳ありませんが、あなたが持っている選択肢です。 .NETとSilverlightは2つの異なるランタイムであるため、非常に似ていて、モジュール(アセンブリ)に同じバイナリファイル形式を使用することもあります。 – SoftMemes

+0

それはあなたのせいではありません。これを実現させるための方法があるようです。手動でmscorlib(2.0.5.0)を手動でテストのアプリケーションドメインに読み込むことはできますが、それをどのようにしてjiveにするかはわかりません。 –

-1

SL4はMSTestと互換性がありません。 SL4ユニットテストプロジェクトを作成する必要があります(これは特別なプロジェクトです)。次にこれをスタートアッププロジェクトに設定します。また、このプロジェクトを実行すると、ユニットテストは実行されたユニットテストの結果を示す小さなUI(ブラウザ内)で実行されます。

編集: 一部は、MSTestを使用した単体テストで成功しています。しかし、これを行うには、いくつかのやり方をする必要があります。また、単体テストはSL4環境では実行されないため、単体テストの結果は有効ではありません。

+0

MSTestingは現在Silverlightと協力しています。 Silverlightテストプロジェクトテンプレートを含むVisual Studio用のSilverlight 4ツールをインストールできます。 –

+0

forums.silverlight.net/t/138721.aspx/1aaを読んでみてください。 ... Silverlight Toolkitに同梱されているコマンドラインソリューションに取り組んでいます。残念ながら、単体テスト用のMSTestとVisual Studioの統合は、現在のSilverlightテストでは機能しません。 –

+1

Morten、それらは異なるランタイムを使用し、問題を回避しても "同じこと"をテストすることはありません。しかし、SilverlightアセンブリやSilverlightコードとのクロスコンパイルで従来の単体テストフレームワークをうまく使用している人もいます。 – SoftMemes

関連する問題