Ich möchte verschiedene Testparameter mit NUnit Test übergeben.
Ich kann Integer-Array übergeben, kein Problem, aber wenn ich String-Array übergeben, funktioniert es nicht.
%Vor%Fehler 3 Ein Attributargument muss ein konstanter Ausdruck sein, typeof Expression oder Array-Erstellung eines Attributparameters type ... \ ContactControllerTests.cs 78 13 UnitTests
Es funktioniert, wenn ich String-Array als zweites Argument verwende.
Was ist der Grund?
%Vor%Ich glaube, das ist ein Fall von Überladungsauflösung & amp; Array-Kovarianzproblem.
Mit [TestCase(new string[] { "" })]
Compiler entscheidet die beste Überladung für TestCase
Konstruktor ist derjenige, der params object[]
als Argument übernimmt. Der Grund dafür ist, dass der Compiler string[]
dank der Kovarianz der Arrays object[]
zuweisen kann und daher eine spezifischere Übereinstimmung als string[]
mit object
Zuweisung (anderer Konstruktor).
Dies passiert nicht mit int[]
, weil Kovarianz gilt nicht für Arrays von Werttypen , sodass der Compiler object
-Konstruktor verwenden muss.
Nun, warum entscheidet es, dass new [] { "ACCOUNT", "SOCIAL" }
kein
Überlege wie folgt
%Vor%Ich bin mir nicht sicher, ob dein Test mir ähnlich wäre. Aber ich habe mit dem folgenden Test das erwartete Ergebnis bekommen.
%Vor%Und das Ergebnis
Wenn Sie darüber hinaus einen Verweis auf das TestCaseAttribute
benötigenTags und Links .net c# unit-testing nunit