2012-03-03 10 views
8

Mam następujący test:Przechodząc pojedyncza wartość params argumentu w NUnit TestCase

[ExpectedException(typeof(ParametersParseException))] 
[TestCase("param1")] 
[TestCase("param1", "param2")] 
[TestCase("param1", "param2", "param3", "optParam4", "optParam5", "some extra parameter")] 
public void Parse_InvalidParametersNumber_ThrowsException(params string[] args) 
{ 
    new ParametersParser(args).Parse(); 
} 

Pierwszy TestCase (oczywiście) nie powiedzie się z powodu następującego błędu:

System.ArgumentException : Object of type 'System.String' 
cannot be converted to type 'System.String[]'. 

Próbowałem wymienić TestCase definicja z tym:

[TestCase(new[] { param1 })] 

, ale teraz pojawia się następujący błąd kompilacji:

error CS0182: An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type

Moje rozwiązanie na razie przenosi przypadek "jednego parametru" do innej metody testowania.

Nadal czy istnieje sposób, aby ten test przebiegał tak samo jak inne?

Odpowiedz

8

Jednym ze sposobów może być użycie TestCaseSource, i mieć metodę, która zwraca każdy zestaw parametrów, zamiast korzystania z TestCase.

3

podstawie this answer w odpowiedzi na pytanie „NUnit cannot recognize a TestCase when it contains an array”, błąd kompilacji wynika z bug i można pokonać przy użyciu składni dla wymienionych przypadków testowych, jako takich:

[ExpectedException(typeof(ParametersParseException))] 
[TestCase(new[] { "param1"}, TestName="SingleParam")] 
[TestCase(new[] { "param1", "param2"}, TestName="TwoParams")] 
[TestCase(new[] { "param1", "param2", "param3", "optParam4", "optParam5"}, "some extra parameter", TestName="SeveralParams")] 
public void Parse_InvalidParametersNumber_ThrowsException(params string[] args) 
{ 
    new ParametersParser(args).Parse(); 
} 
+0

umieścić na niej link do Resharper problem, podczas gdy problem wydaje się być w nunit ... w każdym razie wydaje się, jak resharper rozwiązał problem – Noctis

+1

Robiąc to z 'new [] {...}', gdzie tablica jest z ciągów znaków, pojawia się błąd CS0182, do którego odwołuje się OP powyżej. Typy całkowite wydają się działać poprawnie. – Brandon