6

マネージド アプリケーション アドイン for Office の単体テストに関する提案はありますか? 私は NUnit を使用していますが、MSTest でも同じ問題がありました。

問題は、Office アプリケーション (私の場合は Word) 内に読み込まれた .NET アセンブリがあり、.NET アセンブリのそのインスタンスへの参照が必要なことです。オブジェクトをインスタンス化することはできません。これは、実行する Word のインスタンスがないためです。

これで、Application.COMAddIns("Name of addin").Object インターフェイスを使用して参照を取得できますが、これは RequestComAddInAutomationService を通じて返される COM オブジェクトを取得します。これまでの私の解決策は、テストしたい実際の.NETオブジェクトのすべてのメソッドに対して、そのオブジェクトにプロキシメソッドを持たせることです(すべて条件付きコンパイルで設定されているため、リリースされたバージョンでは消えます)。

COM オブジェクト (VB.NET クラス) には、実際には実際のアドインのインスタンスへの参照がありますが、それを NUnit に返そうとしたところ、適切な p/Invoke エラーが発生しました。

System.Runtime.Remoting.RemotingException : このリモート プロキシにはチャネル シンクがありません。これは、リッスンしている登録済みサーバー チャネルがサーバーにないか、このアプリケーションにサーバーと通信するための適切なクライアント チャネルがないことを意味します。System.Runtime.Remoting.Proxies.RemotingProxy.InternalInvoke (IMethodCallMessage reqMcmMsg、ブール値の useDispatchMessage、Int32 callType) で(MessageData& msgData、Int32型)

メインのアドイン COM を表示できるようにしてみましたが、エラーは次のように変化します。

System.InvalidOperationException : オブジェクトの現在の状態のため、操作は有効ではありません。System.RuntimeType.ForwardCallToInvokeMember (文字列 memberName、BindingFlags フラグ、オブジェクト ターゲット、Int32 [] aWrapperTypes、MessageData & msgData) で

回避策はありますが、面倒で、テスト プロジェクトではなく実際のプロジェクトに多くのテスト コードを配置します。これは、NUnit が実際に動作する方法ではありません。

4

2 に答える 2

2

テストで Office の動作を偽装するには 、さまざまなモック フレームワークNMockRhinoMocksなどを検討してください。

于 2008-09-24T11:19:14.243 に答える