2011-06-07 35 views
2

我使用NUnit與TestCaseSource屬性做動態數據的數據驅動的測試中相同的方法NUnit TestCaseSource pass value to factoryHow to pass dynamic objects into an NUnit TestCase function?NUnit的testcasesource與重構到另一類數據

在每種情況下,它們使用的IEnumerable < TestCaseData>指定數據。從NUnit文檔http://nunit.org/index.php?p=testCaseSource&r=2.5中可以看出,這需要成爲與TestCase相同類的靜態或實例成員。

我想重構成另一個類,因爲我想使用相同的TestCaseSource屬性。有誰知道這是否可能?

回答

3

如果NUnit要求TestCaseSource與測試類在同一個類中,最簡單的方法可能是讓該方法調用您的常用方法。然後,細節可以保存在別處,所以你最小化重複的代碼。

例如,每個測試類可能具有以下內容:

IEnumerable LocalSource() 
{ 
    return CommonSource.GetData(); 
} 

的CommonSource類將加載所必需的測試的數據的單獨的類。

3

羅伯特已經回答了它,但我會嘗試用C#的新特性來改進他的答案。

public static class TestCasesData 
{ 
     private static string[] TestStringsData() 
     { 
      return new string[] {"TEST1", "TEST2"}; 
     } 
     private static string[] TestIntsData() 
     { 
      return new in[] { 1, 2}; 
     } 
} 
[TestFixture] 
public class MyTest 
{ 
    [Test] 
    [TestCaseSource(typeof(TestCasesData), nameof(TestCasesData .TestStringsData))] 
    public void TestCase1(...) 
    { 
    } 

    [Test] 
    public void TestCase2(
     [ValueSource(typeof(TestCasesData), "TestIntsData")] int testData, 
    ) 
    { 
    } 
} 
+0

+1使用'nameof'比魔術字符串更好。如果類或方法名稱發生更改,編譯器將在此處對其進行紅旗標記。 – 2017-11-03 06:55:40

相關問題