12

Ich möchte die folgende Methode in C# für alle Codepfade testen.Einrichten der Testmethode mit verschiedenen Eingaben

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

Ich habe diese pex unit testing gesehen, wo mehrere Eingänge getestet werden. Wie kann ich einen Komponententest erstellen, der mehrere Eingaben akzeptiert?

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

Ich möchte vermeiden, eine Testmethode für jeden Eingang zu erstellen. Ich arbeite mit Visual Studio 2010/2012 und .Net 4.0

+1

möglich Duplikat [? Wie ein Testverfahren mit mehreren Parametern in MSTest läuft] (http://stackoverflow.com/questions/9021881/how-to-run -a-test-methode-mit-mehreren-parameter-in-msstest – whosrdaddy

Antwort

21

Sie können XML, Database, or CSV datasources MS Test verwenden. Erstellen FooTestData.xml:

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

Und legen Sie es als Datenquelle für den 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 mit NUnit-Framework ist es Spiel einfacher - Sie TestCase attribute Testdaten bereitstellen können:

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

Ok im Körper hätte ich dann mehrere Behauptungen? – Gobliins

+0

@Gobliins warum nicht? Es gibt keine Begrenzung für die Anzahl der Bestätigungen –

+2

@Gobliins Auch hier können Sie mit NUnit den benannten Parameter Result verwenden und die Tests können weiter vereinfacht werden, indem Sie die Asserts '[TestCase (1, Result = 1)]' ' ' [TestCase (2, Ergebnis = 2)] ' – mhoff

Verwandte Themen