2014-11-14 14 views
5

Próbuję użyć TestCaseSource w NUnit uruchomić wiele testów z jednym z parametrów jest tablicąTestCase nazwa wyświetlana w NUnit przy użyciu tablic lub leki generyczne

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

Problemem jest to nazwa wyświetlana w biegacza testowym (Używam adaptera testowego NUnit) jest całkiem bezużyteczny, wszystkie są wyświetlane jako test_chop(0,System.Int32[]) lub jeśli używa się List, a następnie test_chop(0,System.Collections.Generic.List`1[System.Int32]).

Jak zachować czytelny test i podać testową nazwę do testu w testerze? Próbowałem już kilku rzeczy, ale nadal mam wymienione wyżej imię.

+2

Możesz po prostu nazwać testy jawnie, jeśli halsujesz na '.SetName (" twoje imię ")'. Być może jednak szukasz czegoś bardziej automatycznego. –

+0

Tak, byłem naprawdę zaskoczony, że nie zrobiłem nic lepszego z tablicami w szczególności. '.SetName (" ")' wygląda jak najlepsza opcja lub mógłbym napisać metodę przekazania nazwy dla tych testów. –

Odpowiedz

2

Użyj funkcji SetName nazwy Przetestuj

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

Chociaż żałuję, że nie było lepszego rozwiązania, to wygląda na to, dzięki :) –

1

jest to rozwiązanie poszedłem z najpierw stworzyłem klasę dla mojego niestandardowego testowym przypadku

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

A potem użyłem że do Zbuduj 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(); 
} 

test jest taka sama.

Nadal uważam, że NUnit powinien generować bardziej przydatne nazwy, ale uznałem to za najłatwiejszy sposób radzenia sobie z moim problemem i jeśli chcę poradzić sobie z wyjątkami, mógłbym stworzyć inną metodę radzenia sobie z nimi.

NB: Nie zapomnij podać using System.Collections; i using System.Collections.Generic;.

Powiązane problemy