12

Voglio testare il seguente metodo in C# per tutti i percorsi di codice.Impostazione del metodo di prova con diversi ingressi

public int foo (int x) 
{ 
    if(x == 1) 
     return 1; 
    if(x==2) 
     return 2; 
    else 
     return 0; 
} 

Ho visto questo pex unit testing dove vengono testati più ingressi. Come posso creare un test unitario che accetta più input?

[TestMethod()] //some setup here?? 
    public void fooTest() 
    { 
     //some assert 
    } 

Desidero evitare di creare un metodo di prova per ciascun input. Sto lavorando con Visual Studio 2010/2012 e .Net 4.0

+1

possibile duplicato di [? Come eseguire un metodo di prova con più parametri in MSTest] (http://stackoverflow.com/questions/9021881/how-to-run -a-test-method-with-multiple-parameters-in-mstest) – whosrdaddy

risposta

21

È possibile utilizzare XML, Database, or CSV datasources MS Test. Creare FooTestData.xml:

<?xml version="1.0" encoding="utf-8" ?> 
<Rows> 
    <Row><Data>1</Data></Row> 
    <Row><Data>2</Data></Row> 
</Rows> 

e impostarlo come origine dati per il test:

[TestMethod] 
[DeploymentItem("ProjectName\\FooTestData.xml")] 
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", 
        "|DataDirectory|\\FooTestData.xml", "Row", 
        DataAccessMethod.Sequential)] 
public void FooTest() 
{ 
    int x = Int32.Parse((string)TestContext.DataRow["Data"]); 
    // some assert 
} 

BTW con quadro NUnit è partita più facile - è possibile utilizzare TestCase attribute per fornire dati di test:

[TestCase(1)] 
[TestCase(2)] 
public void FooTest(int x) 
{ 
    // some assert 
} 
+0

Ok nel corpo avrei quindi più affermazioni? – Gobliins

+0

@Gobliins perché no? Non c'è limite per il conteggio di asserzioni –

+2

@Gobliins Di nuovo, usando NUnit puoi usare il parametro chiamato Result ei test possono essere ulteriormente semplificati, lasciando cadere Assert '[TestCase (1, Result = 1)]' '[TestCase (2, Result = 2)] ' – mhoff