背景
- 我正在通过 C# 自动化 PowerPoint 2007
- 我正在使用 Visual Studio (Microsoft.VisualStudio.TestTools.UnitTesting) 的内置单元测试为我的代码编写单元测试
- 我在自动化 Office 2007 应用程序方面经验丰富
我的问题
- 当我运行单元测试时,第一个单元测试方法运行良好,之后出现关于分离的 RCW 的错误
- 我正在为要共享的测试方法创建一个 PowerPoint 的静态实例,但似乎在运行第一个测试方法后应用程序 RCW 正在分离
源代码
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace TestDemo
{
[TestClass]
public class UnitTest1
{
private static Microsoft.Office.Interop.PowerPoint.ApplicationClass
g_app = new Microsoft.Office.Interop.PowerPoint.ApplicationClass();
private TestContext testContextInstance;
public TestContext TestContext
{
get
{
return testContextInstance;
}
set
{
testContextInstance = value;
}
}
[TestMethod]
public void Test01()
{
g_app.Visible = Microsoft.Office.Core.MsoTriState.msoCTrue;
}
[TestMethod]
public void Test02()
{
g_app.Visible = Microsoft.Office.Core.MsoTriState.msoCTrue;
}
}
}
错误信息
Test method TestDemo.UnitTest1.Test02 threw exception:
System.Runtime.InteropServices.InvalidComObjectException: COM
object that has been separated from its underlying RCW cannot be used..
此消息出现在使用 PowerPoint 实例的行上(当我设置 Visible 属性时)
我尝试过的
- 单元测试的顺序不会改变行为
- Word 2007、Visio 2007 等也会出现同样的问题。
- 使用 NUNIT 编写测试用例时,我没有遇到这些问题 - 显然,Visual Studio 运行单元测试的方式有所不同(不是暗示 VS 不正确,只是指出它与 NUNIT 不同)
- 它与 Visible 属性无关 - 任何方法或属性的使用都会导致此问题
- 我尝试使用属性 AssemblyInitialize 和 ClassInitialize 来创建实例,但没有任何效果
- 谷歌搜索和搜索 - 没有明确的答案可以帮助我
评论
- 我可以切换到 NUNIT,但更愿意继续使用 Visual Studio 的本机单元测试框架
我的问题
- 如何成功创建将在所有 TestMethods 之间共享的 PowerPoint 2007 的单个实例
- 如果您能提供有关为什么会发生这种情况的见解,我将不胜感激。
已解决(感谢 ALCONJA)
- 我按照他的建议修改了 .testrunconfig 并且它起作用了。