是否有可能(动态地)为数据源的不同迭代(数据值)创建不同的测试用例?
本文关键字:数据 创建 测试用例 迭代 有可能 动态 数据源 是否 | 更新日期: 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);
}
}
}