2017-01-23 60 views
1

我正在使用NUnit 2爲C#編寫一些單元測試。我的環境是安裝了Resharper的Visual Studio 2015 Professional。如何使用依賴TestSetup方法運行的NUnit測試用例?

我遇到的問題是我嘗試使用TestCaseSourceAttribute創建的一些參數化測試。在簡單的情況下,我可以創建這樣的測試,將很好地工作:

[Test, TestCaseSource(nameof(MyTestCases))] 
public void MyTest(string name) { 
    Assert.IsFalse(String.IsNullOrEmpty(name)); 
} 

private static IEnumerable<TestCaseData> MyTestCases { 
    get { 
     yield return new TestCaseData("test"); 
     yield return new TestCaseData("123"); 
    } 
} 

然而,當我嘗試實例化,必須從數據庫實體映射或檢查自己的初始化過程的數據庫類型,測試被忽略由測試運動員。例如:

[Test, TestCaseSource(nameof(MyTestCases))] 
public void MyTest(MyMappedType instance) { 
    Assert.IsTrue(instance.SomeProperty); 
} 

private static IEnumerable<TestCaseData> MyTestCases { 
    get { 
     yield return new TestCaseData(GetAnInstanceOfMyMappedType()); 
     yield return new TestCaseData(GetADifferentInstanceOfMyMappedType()); 
    } 
} 

MyMappedType實例化將正常工作,如果它是在測試體本身,但如果任何測試用例初始化它測試被忽略。

我可以讓這些測試以參數化的方式工作嗎?有關此的任何文檔參考?


更新:

這個問題似乎是由於測試用例屬性依賴類的TestSetup方法已經有運行在一些代碼。在初始化每個測試用例之前而不是之後有沒有辦法讓安裝程序運行?

回答

2

不,在生成測試之前無法調用您的設置。

此外,雖然可以在TestCaseSource方法中實例化對象,但只要方法返回,除非保存在某處(如在靜態成員中),否則這些對象將超出範圍。當然,這不是一個很好的做法。

重寫您的TestCaseSource以提供可用於在運行時創建所需對象的參數(如整數和字符串)。

如果您想要爲每個燈具只創建一次這些對象,請使用OneTimeSetUp而不是SetUp,並使用參數化燈具來保存創建它們所需的參數。

相關問題