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

C# 是否可以为数据源的不同迭代(数据值)创建(动态)不同的测试用例?,c#,unit-testing,mstest,ui-automation,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&l

我的数据源位于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]时,我只能看到一个测试用例,是否可以为数据源的不同迭代(数据值)创建(动态)不同的测试用例?
根据我的数据源,它有三个值,是的,测试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);
        }
    }
}

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

还有其他的测试资源管理器解决方案吗?我投票给你,因为这对我来说也是个问题。不幸的是,即使在Visual Studio 2015中,MSTest也不会为您显示多个案例。可能是因为数据源也可以是数据库,不能静态计算,只能在运行时计算。NUnit不仅在这方面更好,而且正如您所看到的,数据驱动的测试更紧凑,更易于维护。ReSharper支持MSTest和NUnit,但仅显示NUnit的子测试用例…:(是否有任何直接/间接(包装类)测试资源管理器的解决方案?还有其他测试资源管理器的解决方案吗?我投票给你,因为这对我来说也是一个问题。不幸的是,即使在Visual Studio 2015中,MSTest也不会为你显示多个案例。可能是因为数据源也可以是一个数据库,不能在运行时静态计算。NUnit不仅仅是better在这方面,但正如您所看到的,数据驱动的测试更加紧凑和可维护。ReSharper支持MSTest和NUnit,但只显示NUnit的子测试用例…:(是否有针对测试资源管理器的直接/间接(包装类)解决方案?