我的数据源位于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中我只能看到一个测试用例,是否可以为数据源的不同迭代(数据值)创建(动态)不同的测试用例? 根据我的数据源,它有三个值,是的。测试资源管理器将其视为一个测试用例非常明显,但对我来说有三个测试用例。有没有办法制作或创建动态测试用例,可以在测试资源管理器中看到三个测试用例而不是一个套件,我怀疑但希望在这里回答
答案 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);
}
}
}