2014-11-14 10 views
5

Ich versuche TestCaseSource in NUnit zu verwenden mehrere Tests mit einer der Parameter ist ein ArrayTestcase Anzeigenamen in NUnit wenn Arrays oder Generics Verwendung

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); 
    } 

Das Problem ist, die in den Test-runner angezeigt zu laufen (Ich benutze den NUnit Test Adapter) ist ziemlich nutzlos, sie alle zeigen als test_chop(0,System.Int32[]) oder bei Verwendung eines List dann test_chop(0,System.Collections.Generic.List`1[System.Int32]).

Wie behalte ich einen ziemlich lesbaren Test und gebe dem Test im Test Runner einen nützlichen Testnamen? Ich habe ein paar Dinge ausprobiert, aber ich bekomme immer noch den oben genannten Namen.

+2

Sie können die Tests nur dann explizit benennen, wenn Sie '.SetName (" Ihr Name ")' anheften. Vielleicht suchen Sie etwas Automatischeres. –

+0

Ja, ich war überrascht, dass es mit Arrays nicht besser lief. '.SetName (" ")' sieht wie die beste Option aus oder ich könnte eine Methode schreiben, um einen Namen für diese Tests zu übergeben. –

Antwort

2

die SetName Funktion können Sie den Test nennen

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

Obwohl ich wünschte, es gäbe eine bessere Lösung, sieht das so aus, danke :) –

1

dies die Lösung ich ging, zuerst habe ich eine Klasse für meinen benutzerdefinierten Testfall

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()); 
    } 
} 

Und dann habe ich das zu Aufbau der 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(); 
} 

der Test ist das gleiche.

Ich denke immer noch, NUnit sollte nützlichere Namen generieren, aber ich fand dies die einfachste Möglichkeit, mit meinem Problem umzugehen, und wenn ich mit Ausnahmen umgehen möchte, könnte ich einfach eine andere Methode erstellen, um diese zu behandeln.

Hinweis: Vergessen Sie nicht, using System.Collections; und using System.Collections.Generic; einzuschließen.

Verwandte Themen