4

MSDN フォーラムでもこの質問をしましたが、解決策が見つかりませんでした。

http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3686852&SiteID=1

ここでの基本的な問題は、相互運用アセンブリには、インストルメント化できる IL が実際には含まれていないことです (おそらくいくつかのデリゲートを除く)。そのため、相互運用レイヤーを実行するテスト プロジェクトをまとめることはできますが、実際に呼び出しているメソッドとプロパティの数を把握することはできません。

プラン B は、RCWW (Runtime Callable Wrapper Wrappers) のライブラリを作成するコード ジェネレーターを作成し、コード カバレッジの目的でそれを計測することです。

編集:@Franci Penov、

はい、それはまさに私がやりたいことです。私たちに提供された COM コンポーネントは、約を含む数十の DLL のライブラリを構成します。3000種類。ライブラリを提供するグループが最小限のテストを行うため、アプリケーションでそのライブラリを使用し、その相互運用層をテストする責任があります。コード カバレッジにより、すべてのインターフェイスとコクラスが確実に実行されるようになります。それが私がやろうとしているすべてです。独自のマネージド コードを実行する別のテスト プロジェクトがあります。

はい、理想的には、COM サーバー チームが独自のコードをテストおよび分析する必要がありますが、私たちは理想的な世界に住んでおらず、彼らの作業に基づいて高品質の製品を提供する必要があります。コード インターフェイスの 80% をテストし、そのうちの 50% が宣伝どおりに機能しないことを示すテスト レポートを作成できれば、回避策の問題ではなく、修正が必要な場所で修正を行うことができます。

あなたが言及したモック レイヤーは便利ですが、最終的に相互運用レイヤー自体をテストするという目標を達成することはできません。私は確かにそれを手作業で維持したくありません。インターフェイスへの変更の。

上で述べたように、次のステップは、ラッパーのラッパーを生成し、テスト目的でそれらを計測することです。

4

2 に答える 2

1

あなたの質問に答えるために - コード カバレッジのために相互運用アセンブリをインストルメント化することはできません。それらにはメタデータのみが含まれており、あなたが言及しているように実行可能コードは含まれていません。

その上、interop アセンブリのカバレッジをコード化しようとしてもあまり意味がありません。作成したコードのコード カバレッジを測定する必要があります。

あなたが言及した MDN フォーラムのスレッドから、コードが COM コンポーネントをどのように使用しているかを実際に測定したいようです。コードの目的が、COM オブジェクトのすべてのメソッドとプロパティを列挙して明示的に呼び出すことでない限り、コード カバレッジを測定する必要はありません。コードが適切なタイミングで適切なメソッド/プロパティを呼び出していることを確認するには、ユニット/シナリオ テストが必要です。

これを行う正しい方法は、COMオブジェクトのモックレイヤーを作成し、すべてのメソッド/プロパティを期待どおりに呼び出していることをテストすることです。

于 2008-09-29T13:19:13.217 に答える
0

プランC:

Mono.Cecilのようなものを使用して、単純な実行カウンターを相互運用アセンブリに織り込みます。たとえば、FAQの次の 1 つのセクションを確認してください。「デバッグできないアセンブリにトレース機能を追加したいのですが、Cecil を使用することは可能ですか?」

于 2008-09-30T10:06:31.237 に答える