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

Gob*_*ins 12 c# unit-testing visual-studio-2010 vs-unit-testing-framework

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

public int foo (int x)
{
    if(x == 1)
        return 1;
    if(x==2)
        return 2;
    else
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

我已经看到这个pex单元测试测试了多个输入.如何创建接受多个输入的单元测试?

[TestMethod()] //some setup here??
    public void fooTest()
    {
         //some assert
    }
Run Code Online (Sandbox Code Playgroud)

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

Ser*_*kiy 22

您可以使用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>
Run Code Online (Sandbox Code Playgroud)

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

[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
}
Run Code Online (Sandbox Code Playgroud)

BTW与NUnit框架的匹配更容易 - 您可以使用TestCase属性来提供测试数据:

[TestCase(1)]
[TestCase(2)]
public void FooTest(int x)
{
   // some assert
}
Run Code Online (Sandbox Code Playgroud)

  • @Gobliins再次,使用NUnit可以使用命名参数Result,并且可以进一步简化测试,删除Asserts` [TestCase(1,Result = 1)]``[TestCase(2,Result = 2)]` (2认同)

mho*_*off 8

如果使用NUnit 参数化测试是要走的路