2012-10-05 70 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

相關問題