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

本文关键字:数据 创建 测试用例 迭代 有可能 动态 数据源 是否 | 更新日期: 2023-09-27 18:16:31

我有我的数据源在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将其视为一个测试用例,但对我来说,有三个测试用例。是否有方法来创建动态测试用例,可以在测试资源管理器中看到三个测试用例,而不是一个套件,我怀疑,但希望这里的答案

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

使用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);
        }
    }
}