【发布时间】:2016-06-09 17:08:12
【问题描述】:
我有一个 Outlook 插件,我正在使用 Microsoft.Office.Interop.Outlook.Storageitem 保存我的设置。
我的大多数测试都访问设置以设置或获取用于联系服务器的配置。
在我的本地机器上,所有测试都运行良好。但是当我将我的项目签入 TFS 并运行测试时,所有测试都失败并出现错误:
System.UnauthorizedAccessException:由于以下错误,检索具有 CLSID {0006F03A-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败:80070005 访问被拒绝。 (来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))。
测试调用以下代码行时发生错误。
Folder inbox = (Folder) new Microsoft.Office.Interop.Outlook.Application().GetNamespace("MAPI").GetDefaultFolder(OlDefaultFolders.olFolderInbox);
我认为出现错误是因为测试尝试访问 Outlook 的 Application 并且没有权限。
- Outlook 安装在运行 TFS 的 Windows Server 2012 上。
- Outlook 在没有配置邮件帐户的情况下也启动了一次。 (当我在没有配置邮件帐户的 Outlook 机器上手动启动测试时,测试运行良好。)
- C:\Windows\SysWOW64\config\systemprofile\Desktop 文件夹存在。
- 我已经在Controlpanel->Administrative tools->Component Services->computers->myComputer->DCOM Config->Microsoft Outlook 中为用户NETWORK SERVICE设置了所有权限时间>
我还发现 this question 没有解决我的问题。
还有其他步骤我可以尝试让我的测试访问以成功运行测试吗?
【问题讨论】:
-
我已经使用 TDD 编写了几个 Office 加载项。我的建议是你的单元测试项目不应该使用真正的 Outlook 对象模型。测试项目甚至不应该引用互操作程序集。好消息是互操作程序集仅公开接口,这使得它们可以使用 Mock 框架(例如 Moq github.com/Moq/moq4
-
您使用的是哪个版本的 TFS?您使用 XAML 构建还是 vNext 构建?你是如何配置构建定义的?
标签: c# unit-testing tfs office-interop outlook-addin