2012-10-05 109 views
1

我在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的。

+0

如果在STA线程上创建了一个COM对象,该线程拥有它 - 当线程退出时,您仍然拥有指向该COM对象的任何.NET RCW对象现在都与它断开连接。听起来像你的测试框架正在从不同的线程调用每个方法。 - 因此,当一个调用的线程关闭时,该对象将断开连接,然后为下一个方法启动一个新线程并解决此问题。您可以从每个方法中尝试'Trace.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId);'并查看每个方法是否返回相同的结果。 – BrainSlugs83

回答

2

您可以饰以[ClassInitalize]一个静态方法,这将只用于测试类运行一次。这是建立初始的好地方连接

+0

如何从Excel文件访问连接详细信息,因为TestContext在ClassInitialize中为null – user662285

+0

在方法中是否有TestContext参数? [ClassInitialize()] public static void ClassInit(TestContext context){}(请参阅[MSDN文章](http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.classinitializeattribute(v = vs.100).aspx)获取更多信息) –

+0

如何从Excel中读取类属性的值context.DataRow为null,而Context.TestMethod正常到来 – user662285

1

对你的initialize方法使用[ClassInitialize]属性这个w你的班级只能跑一次。

[ClassInitialize] 
public static void Initialize() { ... } 

如果您使用NUnit相当于将[TestFixtureSetup]

确保您的TestContext是公有的,因此它不会是空

以下链接可以帮助你,如果你仍然面临空问题 http://social.msdn.microsoft.com/Forums/en-US/vsautotest/thread/e9beee26-4927-4a60-b306-555f47cb3958/

+0

如何从Excel中读取值的类属性context.DataRow是null,而context.TestMethod即将到来 – user662285

相关问题