使用不同的输入设置测试方法

时间:2013-01-03 12:24:48

标签: c# visual-studio-2010 unit-testing vs-unit-testing-framework

我想在C#中为所有代码路径测试以下方法。

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

我已经看到了这个pex unit testing,其中测试了多个输入。如何创建接受多个输入的单元测试?

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

我想避免为每个输入创建一个测试方法。我正在使用Visual Studio 2010/2012和.Net 4.0

3 个答案:

答案 0 :(得分:21)

您可以使用XML, Database, or CSV datasources MS Test。创建FooTestData.xml:

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

并将其设置为测试的数据源:

[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
}
使用NUnit框架的BTW更容易匹配 - 您可以使用TestCase attribute来提供测试数据:

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

答案 1 :(得分:8)

如果使用NUnit parameterized tests是要走的路

答案 2 :(得分:3)

在MS Test中,您可以创建数据驱动的测试,以接受相同测试方法的不同输入。

以下是关于它的博文:http://toddmeinershagen.blogspot.ca/2011/02/creating-data-driven-tests-in-ms-test.html