1

VS11 RCを使用。C# 単体テスト ライブラリ (メトロ スタイル アプリ) プロジェクトでテストしようとしている C++ で記述されたクライアント実行可能ファイルがあります。テストは例外Class not registered HRESULT 0x80040154 (REGDB_E_CLASSNOTRG)で失敗します。これは、テスト プロジェクトの警告に関連していると思われます:実行可能ファイル 'Client.exe' は、winmd ファイル 'C:.Client.winmd' の実装として指定されています。アプリ マニフェストでの登録情報の生成では、インプロセス サーバーのみがサポートされています。アプリ マニフェストでアウトプロセス サーバーの登録情報を指定する必要があります。

MSTest はクラスを COM オブジェクトとして探しているように見えますが、警告はそれをアウトプロセス サーバーとして指定する必要があることを示しています。残念ながら、それは実行可能ファイルであるため、実行したくないと思います。それが必要な場合でも、方法がわかりません。

テスト中のクラスを別のプロジェクトに移動することもできますが、「これを機能させることができない」よりも良い理由なしにそれを行いたくありません。

Metro 実行可能ファイルで定義されたクラスを単体テストする方法はありますか?

4

1 に答える 1

1

テストするコードは、DLL に移動する必要があります。

アクティブ化できるようにするには、ネイティブの Windows ランタイム型を DLL で定義する必要があります(これは事実上、"Windows ランタイムを介してインスタンス化できる" ことを意味します)。実行可能ファイルは、それ自体が定義する型をインスタンス化するために Windows ランタイムを経由する必要はありませんが、単体テストの実行可能ファイルは、それらの型をインスタンス化するために Windows ランタイムを経由する必要があります。

可能な限りすべてを DLL に定義し、EXE をできるだけ小さくすることをお勧めします。EXE はアプリケーションをブートストラップするだけで、実際のコードはすべて DLL に入れます。

于 2012-09-02T01:21:45.957 に答える