2016-04-05 61 views
7

voglio passare un array di stringhe a un mio metodo di prova xUnit, ma quando io faccio solo il seguente non funziona (array + params meccanismo)Passo serie di stringa per xUnit metodo di prova

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

posso aggirare il problema in questo modo:

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

Ma spero ci qualcosa di meglio per risolvere il problema.

Potete dirmi?

+0

Il numero di stringa all'interno dell'array potrebbe essere qualsiasi cosa. –

+0

è il 2018 e ancora questa è l'unica soluzione alternativa che ha funzionato per me. Dovrebbe davvero aprire un issure per xUnit – yair

+0

correggere l'ultimo commento a WAS l'unica soluzione alternativa. Sembra che ci sia in realtà [una soluzione semplice] (https://stackoverflow.com/a/48100749/978502) – yair

risposta

4

Questa è una funzione di parametri C# in cui viene espansa una matrice. quindi xunit non riesce a inserirlo nel tuo argomento, puoi lanciare l'array per forzarlo, in questo modo:

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

+0

L'ho provato e non funziona con la stringa. –

+0

funziona per me ... ti piacerebbe condividere un gist/repo? –

+0

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

1

Questo dovrebbe funzionare

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

Quando u inizializzare un array oggetto come avete fatto tutti gli elementi in esso è un singolo oggetto, così quando si tenta di passare la matrice stringa come parametro passa un primo elemento dell'oggetto array che è "2000-01-02".

2

Usa params prima che l'argomento del metodo di string[], e quindi non sarà necessario inizializzare un string[] nell'attributo InlineData, piuttosto è possibile utilizzare un numero variabile di string letterali, per il quale il compilatore non si lamenta un po ':

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