2013-06-20 18 views
5

Próbuję napisać testcase, która pobiera ciąg znaków i oczekuje, że string zostanie podzielony. Nie mogę zainicjować List w TestCase, więc próbowałem przy użyciu TestCaseSource z params argumentu, jednak mamTestCase z listą lub parametrami

Zła liczba argumentów warunkiem

Czy jest jakiś sposób dla mnie do osiągnięcia mojego końcowy cel ?

public IEnumerable<TestCaseData> blah 
{ 
get 
{ 
    yield return new TestCaseData("hello World", "h", "e", "l", "l", "o", " ", "W", "o", "r", "l", "d"); 
} 
} 

[TestCaseSource("blah")] 
public void testmethod(String orig, params String[] myList) 

Odpowiedz

4

Choć zarówno konstruktora testmethod i TestCaseData wziąć params, TestCaseData interpretuje params inaczej: stara się im map jeden do jednego z parametrów metody w fazie testów. W twoim przypadku NUnit spodziewa się testmethod z 12 parametrami, ale twoja metoda ma tylko dwa. Powoduje to błąd, który widzisz.

Aby rozwiązać ten problem, należy zmienić wywołanie konstruktora następująco:

yield return new TestCaseData(
    "hello World" 
, new[] {"h", "e", "l", "l", "o", " ", "W", "o", "r", "l", "d"} 
); 

Teraz trzeba przejechać tylko dwa argumenty, drugi jest tablicą, które muszą być przekazywane do params String[] myList.

+0

Przysięgam, że próbowałem tego i krzyknął na mnie o inicjatorze obiektu .... może po prostu wariuję. Dzięki ... teraz działa! –