2014-09-18 10 views
6

Perché il mio array di stringhe qui sotto mi dà un errore, non tutte le stringhe ??? "Un argomento attributo deve essere un'espressione costante, typeof espressione o matrice creazione espressione di un attributo tipo di parametro"C# un argomento di attributo deve essere un'espressione costante

[Test] 
[TestCase(new string[]{"01","02","03","04","05","06","07","08","09","10"},TestName="Checking10WOs")] 
public void Test(String[] recordNumber) 
{ 
    //something.. 
} 
+0

Bene tutto ciò che viene creato con 'new', non può essere una costante, giusto? –

+0

Il messaggio di errore sembra piuttosto auto esplicativo. Dice che non puoi usare una creazione di array in un attributo; che è quello che stai facendo. – Servy

+0

http://stackoverflow.com/questions/19578368/an-attribute-argument-must-be-a-constant-expression-typeof-expression-or-array – MethodMan

risposta

2

Le corde sono tutte costanti ma la matrice sono in non è. Prova a modificare:

[Test] 
[TestCase("01","02","03","04","05","06","07","08","09","10", TestName="Checking10WOs")] 
public void Test(String recordNumber) 
{ 
    //something.. 
} 

Questo funziona perché TestCaseAttribute accetta i suoi casi come una lista params.

+0

Grazie, ha risolto l'errore ma quando ho eseguito il test su Nunit, mi ha dato l'errore "il numero di parametri non corrisponde". Sono stato in grado di risolverlo usando [TestCase (3, new String [] {"01", "02", "03", "04", "05", "06", "07", "08", " 09 "," 10 "}, TestName =" Checking10WOs ")] public void SwitchingLevelsFromWOLevel (int a, String [] recordNumber) Ho appena passato un parametro inutile e ha funzionato. non sono sicuro del perché – GucciProgrammer

+0

@GucciProgrammer Vedi la mia modifica, il parametro del test deve essere un singolo 'stringa'. Stranamente funziona, ma eseguirai un test con una serie di stringhe. Pensavo che volessi eseguire quel test 10 volte con un singolo parametro di stringa. –

5

Questo non risponde al titolo di domanda, tuttavia risolve il problema specifico.

È possibile utilizzare TestCaseSource, consente di passare più scenari di test case nello stesso meccanismo di test ed è possibile utilizzare strutture complesse come si desidera.

[Test] 
    [TestCaseSource("TestCaseSourceData")] 
    public void Test(String[] recordNumber, string testName) 
    { 
     //something.. 
    } 

    public IEnumerable<TestCaseData> TestCaseSourceData() 
    { 
     yield return new TestCaseData(new string[] {"01", "02", "03", "04", "05", "06", "07", "08", "09", "10"}, "Checking10WOs"); 
    } 

Si capire che il primo parametro è recordNumber e secondo è testName

vedi immagine sotto.

enter image description here

Spero che questo ti consente di risparmiare un po 'di tempo.