2017-08-11 49 views
0

我使用NUnit的TestCaseTestCaseSourcehere提供獨特的測試數據,並有關於TestCaseSource以下問題。當測試代碼:C#NUnit的TestCaseSource不能每次測試運行

[Test, TestCaseSource("TestData")] 
void Test1(string uniqueId){...} 

private static IEnumerable<TestCaseData> TestData() 
{ 
    string uniqueId = "myString";   
    yield return new TestCaseData(uniqueId); 
} 

那麼TestCaseSource作品和Test1運行與UNIQUEID變量,但是當測試代碼:

private static IEnumerable<TestCaseData> TestData() 
{ 
    string uniqueId = Guid.NewGuid().ToString().Substring(0, 8); 
    yield return new TestCaseData(uniqueId); 
} 

然後同時TestCaseSource似乎回到精細, Test1不運行。請給出意見。

+1

您是否調試過該功能?你確定你的'TestData'方法實際返回一個'TestCaseData'嗎?嘗試調試什麼'uinquetId'我。 – HimBromBeere

回答

1

使用NUnit的隨機類應該解決這個問題。

此問題是使用TestCaseData參數創建測試名稱。在某些情況下(例如,如果您使用VS Test Adapter),TestCaseSources會枚舉多次。如果再次找不到同名的測試 - 事情就會出錯。這就是手動設置名稱來解決問題的原因。

如果使用NUnit的隨機類,然後隨機值是種子和可重複的(這可能是一般使用隨機數據的任何測試一個好主意,反正!)

試試這個:

private static IEnumerable<TestCaseData> TestData() 
{ 
    string uniqueId = TestContext.CurrentContext.Random.NextGuid().ToString().Substring(0, 8); 
    yield return new TestCaseData(uniqueId); 
} 

請注意,NextGuid()方法是NUnit 3.8的一部分,它將在本月底發佈。現在,您可以從MyGet Feed獲取包,而不是NuGet:https://www.myget.org/F/nunit/api/v2

0

它的工作原理,如果我加入.SetName("myName")如下:

private static IEnumerable<TestCaseData> TestData() 
{ 
    string uniqueId = Guid.NewGuid().ToString().Substring(0, 8); 
    yield return new TestCaseData(uniqueId) 
    .SetName("myTest"); 
}