是否可以为数据源的不同迭代(数据值)创建(动态)不同的测试用例?

时间:2016-11-04 13:08:56

标签: c# unit-testing mstest ui-automation

我的数据源位于xml文件(SumTestData.xml)中,如下所示

<Rows>
<Row>
    <A1>1</A1>
    <A2>1</A2>
    <Result>2</Result>
</Row>
<Row>
    <A1>1</A1>
    <A2>2</A2>
    <Result>3</Result>
</Row>
<Row>
    <A1>1</A1>
    <A2>-1</A2>
    <Result>1</Result>
</Row>

现在我在下面的测试方法中使用它

[TestMethod]
[DeploymentItem("ProjectName\\SumTestData.xml")]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML","|DataDirectory|\\SumTestData.xml","Row",DataAccessMethod.Sequential)]

public void SumTest()
{

    int a1 = Int32.Parse((string)TestContext.DataRow["A1"]);
    int a2 = Int32.Parse((string)TestContext.DataRow["A2"]);
    int result = Int32.Parse((string)TestContext.DataRow["Result"]);
    ExecSumTest(a1, a2, result);
}

当我执行[TestMethod]时在Test Explorer中我只能看到一个测试用例,是否可以为数据源的不同迭代(数据值)创建(动态)不同的测试用例? 根据我的数据源,它有三个值,是的。测试资源管理器将其视为一个测试用例非常明显,但对我来说有三个测试用例。有没有办法制作或创建动态测试用例,可以在测试资源管理器中看到三个测试用例而不是一个套件,我怀疑但希望在这里回答

1 个答案:

答案 0 :(得分:0)

使用MSTest,您将始终看到一个数据驱动测试方法的测试用例(即使在测试资源管理器或单元测试会话中使用ReSharper)

但是,如果使用NUnit测试,则可以看到每行的测试用例:

using System;
using NUnit.Framework;

namespace MyTests
{
    public class MyTestClass
    {
        private static object[] myDataSource => new object[]
            {
                new object[] { 1, 1, 2 },
                new object[] { 1, 2, 3 },
                new object[] { 1, -1, 1 },
            }

        [TestCaseSource(nameof(myDataSource))]
        public void MyTestMethod(int a1, int a2, int result)
        {
            ExecSumTest(a1, a2, result);
        }
    }
}

或者,如果所有参数都是常量,则可以使用TestCase属性。您甚至可以为行定义自定义名称:

using System;
using NUnit.Framework;

namespace MyTests
{
    public class MyTestClass
    {
        [TestCase(1, 1, 2, TestName = "Custom name of the first row")]
        [TestCase(1, 2, 3)]
        [TestCase(1, -1, 1)]
        public void MyTestMethod(int a1, int a2, int result)
        {
            ExecSumTest(a1, a2, result);
        }
    }
}