2013-08-23 35 views
0

我必須從輔助類的靜態方法中找到有關當前正在運行的UnitTest的信息。 想法正在從每個測試中獲得一個獨特的關鍵。從當前正在運行的單元測試中獲取信息

我想過使用TestContext,不知道是否有可能。

爲例

[TestClass] 
public void MyTestClass 
{ 
    public TestContext TestContext { get; set; } 

    [TestMethod] 
    public void MyTestMethod() 
    { 
     TestContext.Properties.Add("MyKey", Guid.NewGuid()); 

     //Continue.... 
    } 
} 


public static class Foo 
{ 

    public static Something GetSomething() 
    { 
     //Get the guid from test context. 
     //Return something base on this key 
    } 

} 

我們目前存儲的線程上此鍵與Thread.SetData,但它是有問題的,如果被測試代碼產生多個線程。對於每個線程,我需要爲給定的單元測試獲得相同的密鑰。

Foo.GetSomething()不從unittest本身調用。調用它的代碼是由Unity注入的模擬。

編輯

我會解釋的背景一點點,因爲它似乎是混亂的。

通過統一創建的對象是實體框架的上下文。在運行單元測試時,上下文將以由Foo.GetSomething創建的結構獲取其數據。我們稱之爲DataPersistance

DataPersistance不能是單身人士,因爲單元測試會影響對方。

我們目前每個線程有一個DataPersistance的實例,只要被測試的代碼是單線程的,它就很好。

我想每個單元測試一個DataPersistance的實例。如果一個測試可以得到一個獨特的GUID,我可以解決這個測試的實例。

+0

爲什麼你不把它作爲參數傳遞給輔助類? –

+0

問題是什麼? –

+0

@Darin:因爲輔助類是靜態的,並且它被通過Unity創建的對象遠程調用。 – Johnny5

回答

0
public static class Foo 
{ 
    public static Something GetSomething(Guid guid) 
    { 
     //Return something base on this key 
     return new Something(); 
    } 
} 

測試:

[TestClass] 
public void MyTestClass 
{ 
    public TestContext TestContext { get; set; } 

    [TestMethod] 
    public void MyTestMethod() 
    { 
     Guid guid = ...; 
     Something something = Foo.GetSomething(guid); 
    } 
} 
+0

'Foo.GetSomething'不是直接從測試方法中調用。 – Johnny5

+0

你想達到什麼目的?假你的數據庫? –

+0

以某種方式,是的。 – Johnny5

相關問題