2014-11-14 42 views
5

我試圖使用TestCaseSource在NUnit的與的參數之一是一個數組測試用例顯示名稱

private static readonly object[] ReturnChopCases = 
    { 
     new TestCaseData(3, new List<int> {}).Returns(-1), 
     new TestCaseData(3, new List<int> {1}).Returns(1), 
     new TestCaseData(1, new List<int> {1,2}).Returns(1), 
    }; 

    [TestCaseSource("ReturnChopCases")] 
    public int test_chop(int SearchNumber, int[] SearchArray) 
    { 
     return Chopper.Chop(3, SearchArray); 
    } 

問題運行多個測試是在測試運行中顯示的名稱(我使用NUnit測試適配器)是相當無用的,它們全部顯示爲test_chop(0,System.Int32[])或者如果使用List然後test_chop(0,System.Collections.Generic.List`1[System.Int32])

如何保留一個相當可讀的測試,並給測試運行者的測試提供一個有用的測試名稱?我嘗試了一些東西,但我仍然得到上面提到的名稱。

+2

如果你使用'.SetName(「你的名字」)',你可以明確地命名測試。你可能正在尋找更自動化的東西。 – 2014-11-14 15:50:30

+0

是的,我真的很驚訝它沒有做更好的特別與數組。 '.SetName(「」)'看起來是最好的選擇,或者我可以編寫一個方法來傳入這些測試的名稱。 – 2014-11-15 13:01:14

回答

2

使用SetName功能來命名測試

new TestCaseData(3, new List<int> {}).Returns(-1).SetName("test_chop_List<int>"), 
+0

雖然我希望有一個更好的解決方案,看起來像它,謝謝:) – 2014-11-15 13:02:05

1

這是我去解決,首先,我創建了一個類爲我的自定義測試用例

public class CustomTestCase 
{ 
    public CustomTestCase(int SearchNumber, List<int> List, int Result) 
    { 
     searchNumber = SearchNumber; 
     list = List; 
     result = Result; 
    } 
    private int searchNumber; 
    private List<int> list; 
    private int result; 

    public string TestName() 
    { 
     return string.Format("TestChop({0},{{{1}}})", searchNumber, String.Join(",", list)); 
    } 

    public TestCaseData SimpleTest() 
    { 
     return new TestCaseData(searchNumber, list).Returns(result).SetName(this.TestName()); 
    } 
} 

然後我使用了以打造TestCaseSource

private static IEnumerable ReturnChopCases() 
{ 
    List<int> emptyList = new List<int> { }; 
    yield return new CustomTestCase(3,emptyList,-1).SimpleTest(); 

    List<int> singleItemList = new List<int> { 1 }; 
    yield return new CustomTestCase(3, singleItemList, 1).SimpleTest(); 
    yield return new CustomTestCase(3, singleItemList, 1).SimpleTest(); 
} 

測試是一樣的。

我仍然認爲NUnit應該生成更多有用的名稱,但是我發現這是處理我的問題的最簡單方法,如果我想處理異常,我可以創建另一個方法來處理這些問題。

注意:不要忘記包括using System.Collections;using System.Collections.Generic;

相關問題