我在C#中创建了一个UnitTesting项目并面临一些问题。UnitTesting:已经与其底层RCW分离的COM对象不能使用
首先,我想要做一些连接功能,一开始只应该发生一次。 之后,我想从Excel文件中读取一些记录并测试一些插入操作,并且每次插入时都发生TestCleanUp()在构造函数被调用之后被触发,然后初始化方法。 我不想让构造函数在每个记录插入一次后就着火。 我很困惑在哪里把我的连接功能,以及如何避免每次调用构造函数。
[TestClass]
public class TestConnection
{
private TestContext testContextInstance;
private static iCAM70003SDKC o_DeviceControl = null;
/// <summary>
///Gets or sets the test context which provides
///information about and functionality for the current test run.
///</summary>
public TestContext TestContext
{
get
{
return testContextInstance;
}
set
{
testContextInstance = value;
}
}
[ClassInitialize()]
public static void Initialize()
{
int iResult = 0;
EOperationalMode OperationalMode;
}
现在我可以按照建议在ClassInitialize中进行初始连接。 现在,我正在创建初始连接的ClassInitialize中创建我的COM对象的实例。 现在我有不同的Testmethod进行测试。 现在,当我运行我的程序,我得到异常的先执行TestMethod的后“已从与其基础RCW分开COM对象不能使用”?
我想,当它试图执行第二TestMethod的COM对象被破坏掉了。 如何保持此COM对象还活着吗? 我不是要求ReleaseComObject的。
如果在STA线程上创建了一个COM对象,该线程拥有它 - 当线程退出时,您仍然拥有指向该COM对象的任何.NET RCW对象现在都与它断开连接。听起来像你的测试框架正在从不同的线程调用每个方法。 - 因此,当一个调用的线程关闭时,该对象将断开连接,然后为下一个方法启动一个新线程并解决此问题。您可以从每个方法中尝试'Trace.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId);'并查看每个方法是否返回相同的结果。 – BrainSlugs83