- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人对 Office 托管应用程序加载项的单元测试有任何建议吗?我正在使用 NUnit,但我在使用 MSTest 时遇到了同样的问题。
问题是 Office 应用程序(在我的例子中为 Word)内加载了一个 .NET 程序集,并且我需要对该 .NET 程序集的该实例的引用。我不能只实例化该对象,因为这样它就没有 Word 实例来执行操作。
现在,我可以使用 Application.COMAddIns("Name of addin").Object 接口(interface)来获取引用,但这会获取通过 RequestComAddInAutomationService 返回的 COM 对象。到目前为止,我的解决方案是让该对象为我想要测试的真实 .NET 对象中的每个方法都拥有代理方法(所有这些方法都在条件编译下设置,以便它们在发布的版本中消失)。
COM 对象(VB.NET 类)实际上具有对真实加载项实例的引用,但我尝试将其返回到 NUnit,结果出现了一个不错的 p/Invoke 错误:
System.Runtime.Remoting.RemotingException:此远程处理代理没有 channel 接收器,这意味着服务器没有正在监听的注册服务器 channel ,或者此应用程序没有合适的客户端 channel 与服务器通信。在System.Runtime.Remoting.Proxies.RemotingProxy.InternalInvoke(IMethodCallMessage reqMcmMsg, bool useDispatchMessage,Int32 callType)在 System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(IMessage reqMsg)在System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&msgData,Int32类型)
我尝试使主加载项 COM 可见,但错误发生了变化:
System.InvalidOperationException:由于对象的当前状态,操作无效。在 System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
虽然我有一个解决方法,但它很困惑,并且将大量测试代码放入实际项目而不是测试项目中 - 这并不是 NUnit 真正的工作方式。
最佳答案
我就是这样解决的。
我的加载项中的几乎所有内容都通过 UI 中按钮的 Click 方法运行。我已将所有这些 Click 方法更改为仅包含简单的无参数调用。
然后,我创建了一个名为 EntryPoint 的新文件(部分类),其中包含许多非常短的 Friend Sub,其中每个通常都是对参数化工作函数的一到两次调用,以便所有 Click 方法都被调用到这个文件。例如,有一个函数可以打开标准文档并调用“另存为”到我们的 DMS 中。该函数接受一个要打开哪个文档的参数,我们使用了几十个标准文档。
所以我有
Private Sub btnMemo_Click(ByVal Ctrl As Microsoft.Office.Core.CommandBarButton, ByRef CancelDefault As Boolean) Handles btnMemo.Click
DocMemo()
End Sub
在 ThisAddin 中,然后
Friend Sub DocMemo()
OpenDocByNumber("Prec", 8862, 1)
End Sub
在我的新 EntryPoints 文件中。
我添加了一个新的 AddInUtilities 文件,其中包含
公共(public)接口(interface)IAddInUtilities
#如果调试则
Sub DocMemo()
#End If
End Interface
Public Class AddInUtilities
Implements IAddInUtilities
Private Addin as ThisAddIn
#如果调试则
Public Sub DocMemo() Implements IAddInUtilities.DocMemo
Addin.DocMemo()
End Sub
#End If
Friend Sub New(ByRef theAddin as ThisAddIn)
Addin=theAddin
End Sub
End Class
我转到 ThisAddIn 文件并添加
私有(private)实用程序作为 AddInUtilities
protected 重写函数 RequestComAddInAutomationService() 作为对象 如果公用事业什么都不是那么 实用程序 = 新的 AddInUtilities(Me) 万一 返回公用事业结束函数
现在可以使用 NUnit 测试 EntryPoints 中的 DocMemo() 函数,如下所示:
<TestFixture()> Public Class Numbering
Private appWord As Word.Application
Private objMacros As Object
<TestFixtureSetUp()> Public Sub LaunchWord()
appWord = New Word.Application
appWord.Visible = True
Dim AddIn As COMAddIn = Nothing
Dim AddInUtilities As IAddInUtilities
For Each tempAddin As COMAddIn In appWord.COMAddIns
If tempAddin.Description = "CobbettsMacrosVsto" Then
AddIn = tempAddin
End If
Next
AddInUtilities = AddIn.Object
objMacros = AddInUtilities.TestObject
End Sub
<Test()> Public Sub DocMemo()
objMacros.DocMemo()
End Sub
<TestFixtureTearDown()> Public Sub TearDown()
appWord.Quit(False)
End Sub
End Class
您唯一无法进行单元测试的是实际的 Click 事件,因为您以不同的方式调用 EntryPoint,即通过 RequestComAddInAutomationService 接口(interface)而不是通过事件处理程序。
但是它有效!
关于vb.net - Microsoft Office .NET 插件的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/126526/
我正在尝试将 Outlook API 与我的 React 应用程序集成。当我尝试使用 microsoft-graph-client 实现身份验证时,遇到以下错误。 'ImplicitMSALAuthe
我正在尝试使用 Microsoft Graph Beta API 在 Microsoft Teams 中创建 channel 。在文档中,它说 channel 实体具有属性 IsFavoriteByD
我的目标很简单。我想使用图形 API 将自动聊天消息发送到 MS Teams channel 。 这似乎是图形 API 的测试版功能,仅在 Microsoft.Graph.Beta 中可用。 我已经阅
通过委派权限获取 Teams channel 消息时(用户是团队成员): https://graph.microsoft.com/beta/teams/ {team_id}/channels/{cha
我正在使用带有 OData 端点的 Web API 和 Entity Framework 创建一个 RESTful 服务。 Microsoft.AspNet.WebApi.OData 和 Micros
我可以通过对标题和作者姓名的评估查询(以及解释查询)获得良好的结果。 但是如果我想通过 DOI 查找论文怎么办? 我可以通过扩展元数据描述(在现有搜索的属性中)获取条目的DOI信息,但是由于扩展元数据
我正在尝试通过displayName查询用户,但是在同时使用C#SDK和Graph Explorer发送请求时,我无法转义单引号。 更新:在示例中不清楚,我遇到麻烦的搜索词是I' 查询示例: http
我在使用 Microsoft fakes 的解决方案中有一个单元测试项目,当我构建它时出现以下错误。它提示无法加载的 DLL 在磁盘上。我已经打开了 Fusion 日志记录,这表明绑定(bind)成功
我想创建一个应用程序,当用户在 MS Teams 中接到电话时会收到通知。我的意思是我想在来电事件上订阅一些东西,然后根据来电信息做一些事情。这可能吗?到目前为止,我在 SDK 中没有看到任何事件。
如果我开发一个网站,它是否会以相同的方式在 IE11、Chrome、Firefox 和 edge 上运行,还是我们需要专门为 IE11 编写代码?我没有 Windows 8,因此无法在边缘浏览器上测试
我几个月前为某些收件箱创建了一些订阅,系统成功收到了有关收到电子邮件的通知,订阅也定期更新以增加到期日期。这是我的订阅列表: https://graph.microsoft.com/v1.0/subs
如果我开发一个网站,它是否会以相同的方式在 IE11、Chrome、Firefox 和 edge 上运行,还是我们需要专门为 IE11 编写代码?我没有 Windows 8,因此无法在边缘浏览器上测试
如果 Edge 在某些机器上发生崩溃,我们需要检查日志以了解发生了什么情况。 最佳答案 Microsoft Edge 实际上是一个 Windows 进程,因此您应该能够在事件查看器中查看日志。此外,您
我已经将一些测试用例与项目中的单元测试相关联。该项目已构建并复制到共享上的放置位置。当我去运行这些测试时,由于作为这些测试的一部分包含的非托管 DLL 的 System.DllNotFoundExce
我对 asp.net 核心标识中的三个包感到困惑。我不知道彼此之间有什么区别。还有哪些是我们应该使用的? 我在 GitHub 上找到了这个链接,但我没有找到。 Difference between M
在我的 Windows 类库(由 MVC 网站使用)中,我安装了 NugetPackage Microsoft.SqlServer.Types (Spatial)。 现在,我正在使用 ado.net
我有一个简单的 web 应用程序,我在 Teams 中显示为一个应用程序。我已经在 App Studio 中进行了设置,一切都按我的预期工作,一切都很好。它正在显示我的网络应用程序,这就是我想要的。
有什么不同?它们都是业务管理解决方案。他们做的一样吗?一些不同的版本?他们使用同一个平台吗? 动态 Assets 净值 Microsoft Dynamics NAV 2009 is a compreh
如何制定包含非英语字符(例如日耳曼语Umlauts)的Microsoft Graph /myOrganization/users OData查询? 例子: 我的租户中有一个名为“ThomasMülle
我想创建一个类似于乐队附带的星巴克应用程序的应用程序。我想显示条形码。我可以在云端或本地设备上将条形码生成为 JPG 图像,但我需要能够在乐队的屏幕上显示它们。到目前为止,我还没有找到使用 Band
我是一名优秀的程序员,十分优秀!