2016-04-05 9 views
7

Ich möchte ein Array von String zu einem meiner XUnit Testmethode passieren, aber wenn ich nur die folgenden es nicht funktioniert (array + params Mechanismus)Pass Array von String xUnit Testmethode

[Theory] 
    [InlineData(new object[] { "2000-01-02", "2000-02-01" })] 
    public void TestSynchronizeMissionStaffing_PeriodNoMatch(string[] dateStrings) 

ich kann so das Problem umgehen:

[Theory] 
    [InlineData(0, new object[] { "2000-01-02", "2000-02-01" })] 
    public void TestSynchronizeMissionStaffing_PeriodNoMatch(int dummy, string[] dateStrings) 

Aber ich hoffe es besser, etwas, das Problem zu lösen.

Können Sie mir sagen?

+0

Die Anzahl der Zeichenfolge im Array könnte alles sein. –

+0

es ist 2018 und immer noch ist dies die einzige Problemumgehung, die für mich funktioniert hat. Sollte wirklich eine issure für xUnit öffnen – yair

+0

beheben Sie den letzten Kommentar zu WAS die einzige Problemumgehung. Es scheint, dass es tatsächlich [eine einfache Lösung] (https://stackoverflow.com/a/48100749/978502) – yair

Antwort

4

Dies ist eine C# -Paramefunktion, in der ein Array erweitert wird. Damit xunit das Argument nicht eingibt, können Sie das Array wie folgt erzwingen:

[InlineData((object)(new object[] { "2000-01-02", "2000-02-01" }))] Siehe auch here.

+0

Ich hatte das versucht und es funktioniert nicht mit Zeichenfolge. –

+0

funktioniert für mich ... möchten Sie einen Gedanken/Repo teilen? –

+0

https://gist.github.com/anonymous/af6fc4095705228909de923e25ac0645 –

1

Diese

[Theory] 
[InlineData(new object[] { new string[] { "2000-01-02", "2000-02-01" } })] 
public void TestSynchronizeMissionStaffing_PeriodNoMatch(string[] dateStrings) 

Wenn u ein Objekt Array initialisieren wie Sie alle Elemente tat funktionieren sollte auf ein einzelnes Objekt ist, also wenn Sie String-Array passieren versucht, als Parameter übergibt es ein erstes Element des Objekts Array, das "2000-01-02" ist.

2

Verwenden params vor der string[] Argumente der Methode, und dann werden Sie nicht brauchen ein string[] in InlineData Attribute zu initialisieren, sondern Sie eine variable Anzahl von string Literale verwenden könnten, für die der Compiler nicht einen Bit nicht beschweren:

[Theory] 
    [InlineData("2000-01-02", "2000-02-01")] 
    public void TestSynchronizeMissionStaffing_PeriodNoMatch(params string[] dateStrings)