Ich habe einen Test-Methode wie folgt:Übergeben Sie ein Array als Attribut-Wert-
[TestCase(new string[] { "1", "2", "5" }, Result = true)]
bool AllocateIDsTest1(IEnumerable<string> expected)
{
var target = ...
var actual = target.AllocateIDs(expected);
return actual.SequenceEqual(expected);
}
Allerdings erhalte ich einen Compiler-Fehler:
An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type.
Wahrscheinlich der Compiler zwischen dem unterscheiden kann nicht folgende Konstrukteure:
TestCase(params object[] args, Named Parameters);
und
TestCase(object ob1, Named Paramaters);
weil zu params object[]
und object
aufgelöst werden kann.
Von this post Ich weiß, dass ein String-Array möglich sein sollte, als Compile-Konstanten zu übergeben.
Wie kann ich eine Reihe von Zeichenfolgen an eine TestCase
liefern?
Ausgezeichnete Abhilfe. Eine weitere Option ist die Verwendung von TestCaseSource, siehe Dokumentation. –
Nicht einmal ein Workaround. :-) So soll TestCase verwendet werden. Der Compilerfehler liegt nicht daran, dass Sie ein Array übergeben haben - das ist ausdrücklich für Attribute erlaubt. Das liegt daran, dass Sie den Attributkonstruktor bitten, das Array dynamisch mithilfe von new zu erstellen. C# lässt das nicht zu. – Charlie
@Charlie Wie genau sollte also die Zuordnung eines Arrays zu einem Attribut funktionieren, wenn Sie sagen: "Das ist ausdrücklich auf Attribute erlaubt"? Über ein 'statisches' Feld? – HimBromBeere