12

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

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

我见过这个pex 单元测试,其中测试了多个输入。如何创建一个接受多个输入的单元测试?

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

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

4

3 回答 3

23

您可以使用XML、数据库或 CSV 数据源 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 框架更容易匹配 - 您可以使用TestCase 属性来提供测试数据:

[TestCase(1)]
[TestCase(2)]
public void FooTest(int x)
{
   // some assert
}
于 2013-01-03T12:33:37.610 回答
8

如果使用 NUnit参数化测试是可行的方法

于 2013-01-03T12:33:48.170 回答
3

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

这是一篇关于它的博客文章:http: //toddmeinershagen.blogspot.ca/2011/02/creating-data-driven-tests-in-ms-test.html

于 2013-01-03T12:34:46.470 回答