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