2014-09-18 32 views
6

Dlaczego moja tablica sznurów poniżej daje mi błąd, czy nie wszystkie są ciągi ??? „Argument atrybut musi być stałym wyrażeniem, typeof stworzenie wyrażenie wyrażenie lub tablicą typu parametru atrybut”C# argument atrybutu musi być stałym wyrażeniem

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

Cóż, wszystko, co zostanie utworzone za pomocą 'nowego', nie może być stałe, prawda? –

+0

Komunikat o błędzie wydaje się dość oczywisty. Mówi, że nie można użyć tworzenia tablicy w atrybucie; właśnie to robisz. – Servy

+0

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

Odpowiedz

2

ciągi są wszystkie stałe, ale są one w tablicy nie ma. Spróbuj to zamiast:

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

To działa, ponieważ TestCaseAttribute akceptuje jego sprawy jako lista params.

+0

Dzięki, to rozwiązało błąd, ale kiedy wykonałem test na Nunit, dało mi to błąd "liczba par nie pasuje". Udało mi się go rozwiązać za pomocą [TestCase (3, nowy ciąg [] {"01", "02", "03", "04", "05", "06", "07", "08", " 09 "," 10 "}, TestName =" Checking10WOs ")] public void SwitchingLevelsFromWOLevel (int a, String [] recordNumber) Właśnie przekazałem bezużyteczny parametr i zadziałało. nie wiem dlaczego – GucciProgrammer

+0

@GucciProgrammer Zobacz moją edycję, parametr twojego testu musi być pojedynczym 'ciągiem'. Dziwne, ale działa, ale przeprowadzisz jeden test z tablicą łańcuchów. Myślałem, że chcesz uruchomić ten test 10 razy z jednym parametrem ciągu. –

5

To nie odpowiada na tytuł pytania, ale rozwiązuje określony problem.

Być może zechcesz użyć TestCaseSource, pozwala to na przekazywanie wielu scenariuszy przypadków testowych do tego samego mechanizmu testowania i możesz używać jako struktur złożonych, jak chcesz.

[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"); 
    } 

To będzie dowiedzieć się, że pierwszy parametr jest recordNumber a drugi jest testName

patrz obrazek poniżej.

enter image description here

Nadzieja to zaoszczędzić trochę czasu.

Powiązane problemy