有没有人对Office托管应用程序加载项的单元测试有任何建议?我正在使用NUnit,但我遇到了与MSTest相同的问题.
问题是在Office应用程序(在我的例子中是Word)中加载了.NET程序集,我需要对.NET程序集的该实例的引用.我不能只是实例化对象,因为它不会有一个Word实例来做事情.
现在,我可以使用Application.COMAddIns("addin的名称").对象接口来获取引用,但这会得到一个通过RequestComAddInAutomationService返回的COM对象.到目前为止,我的解决方案是,对于该对象,我想要测试真实.NET对象中的每个方法的代理方法(所有在条件编译下设置,以便它们在发布的版本中消失).
COM对象(一个VB.NET类)实际上有一个对真实加载项实例的引用,但我尝试将其返回给NUnit,我得到了一个很好的p/Invoke错误:
System.Runtime.Remoting.RemotingException:此远程处理代理没有通道接收器,这意味着服务器没有正在侦听的已注册服务器通道,或者此应用程序没有合适的客户端通道与服务器通信.在System.Runtime.Remoting.Proxies.RemotingProxy.InternalInvoke(IMethodCallMessage reqMcmMsg,布尔useDispatchMessage,的Int32 CALLTYPE)在System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(即时聊天reqMsg)在System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData&msgData,Int32类型)
我尝试使主加载项COM可见并且错误更改:
System.InvalidOperationException:由于对象的当前状态,操作无效.at System.RuntimeType.ForwardCallToInvokeMember(String memberName,BindingFlags flags,Object target,Int32 [] aWrapperTypes,MessageData&msgData)
虽然我有一个解决方法,它很混乱并且在实际项目中放置了大量测试代码而不是测试项目 - 这实际上并不是NUnit的工作方式.