1

ここでの環境は C#/.Net 4 です。

私の MS Unit Test 単体テスト プロジェクトでは、日付変換計算に COM dll を使用するコードをテストしています (これは、他の COM DLL を使用するため、3 つの COM DLL すべてが関与します)。

通常のアプリケーション/サービスのセットアップで実行する場合、COM dll のアセンブリ ID にリンクするマニフェストを使用してサイド バイ サイドの実行を問題なく実行できますが、単体テストから同じことを実行しようとするとプロジェクトでは、「クラスが登録されていません」例外が原因で常に失敗します。

今、私はすでにこれを試しました:

  • テスト DLL マニフェストの埋め込み
  • テスト DLL マニフェスト、COM DLL マニフェスト + COM DLL 自体の両方を埋め込む

しかし、役に立たない。だから私は疑問に思っています.マニフェストを介したCOMリンクをユニットテスト環境に認識させるにはどうすればよいですか? 私には、DLLマニフェストのリンクがうまく機能していないように見えますが(EXEマニフェストは正常に機能しています)、通常、そのような考えは何か間違ったことをしているのと同じです...

私は通常、このようなものを検索するのにかなり成功していますが、これについてはヒットがほとんどなく、これに似たものは何もないので、何か考えや意見があれば共有してください:)が必要です、教えてください。

(COM dll の使用は、適切な場所に依存関係を挿入することでおそらく回避できることはわかっていますが、今のところ、サイド バイ サイド セットアップの単体テストに関するこのケースを検討したいと思います)。

敬具

ジェスパー

4

1 に答える 1

0

私は MS Unit テストに詳しくないので、これは当て推量です。

通常のアプリケーション セットアップでは、アプリ マニフェストを通じて COM サーバー マニフェストを参照しているため、一般的な "プロセス アクティベーション コンテキスト" には適切な参照が含まれています。

単体テストのシナリオでは、アプリケーションを制御しないため、プロセス アクティベーション コンテキストに適切な参照がありません。テスト dll マニフェストを DLL に埋め込みましたが、追加の作業を行わない限り、マニフェストに対して静的な DLL 依存関係を解決できるようにするだけです。マニフェスト アクティベーション コンテキストは、DLL コードがアクティブなときは常に「アクティブ」ではありません。COM サーバーへの呼び出しに関するコンテキストを手動で作成してアクティブ化することにより、このコンテキストを自分で管理する必要があります。

例として、 CodePlex のOneCodeプロジェクトから CSRegFreeCOMClient を見てみましょう。

于 2010-11-24T06:46:11.580 に答える