2016-07-11 18 views
1

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?

Antwort

3

fand ich eine Lösung, die den params-Ansatz:

[TestCase("1", "2", "5", Result = true)] 
public bool AllocateIDsTest1(params string[] expected) 
{ 
    var target = ... 
    var actual = target.AllocateIDs(expected); 

    return actual.SequenceEqual(expected); 
} 
+0

Ausgezeichnete Abhilfe. Eine weitere Option ist die Verwendung von TestCaseSource, siehe Dokumentation. –

+0

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

+0

@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

Verwandte Themen