大数据集的单一测试方法
本文关键字:测试方法 单一 数据集 | 更新日期: 2023-09-27 18:04:17
我用Microsoft.VisualStudio.TestTools.UnitTesting
编写了一个测试用例,迭代了存储在磁盘上的文本文件中的大量测试用例。一旦其中一个测试用例导致"单元测试"失败,我使用的Assert方法(AreEqual
或Fail
)返回包含失败用例细节的ErrorMessage
。这很好,但是,我希望我的代码继续执行所有的测试用例,即使有一个用例失败,所以我可以看到所有失败用例的细节。
我从我的研究中了解到,这并不一定是一个单元测试,按照单元测试大数据集的定义?所以我也对如何解决这个问题的替代建议持开放态度,而不仅仅是那些与Microsoft.VisualStudio.TestTools.UnitTesting
或单元测试框架相关的建议。
有一个概念叫做数据驱动测试。我在NUnit中使用过它,但在Visual Studio单元测试中也有一种方法。
这将为每个数据行创建一个测试,而不是为整个数据集创建单个测试。这将为整个数据集运行测试,即使失败也会继续测试下一个数据项。最终的结果将突出显示每个测试用例单独处理的失败和成功。
我过去所做的是创建一个t4模板来从数据源创建我的测试。通常是测试的CSV文件。要(重新)生成,你所需要做的就是打开TT文件并保存它来重新生成——或者使用VS工具。
这样做的优点是每个条件只有一个测试,并且它还可以轻松地为您提供可重复的测试,即使它们是为您生成的。您还可以非常轻松地调试失败的测试,因为代码最终是c#。
例如,创建一个*。
创建一个包含数据的CSV文件。<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".generated.cs" #>
<#
var testCases =
File.ReadAllLines(Path.Combine(Host.TemplateFile, @"Cases.csv"))
.Skip(1) //Headers
.Select(line => line.Split(','))
.Select(
values =>
new
{
TestName = values[0],
Expected = values[1],
Actual = values[2],
//More Stuff from values[n]
});
#>
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace DaveShaw
{
[TestClass]
public class GeneratedTests
{
<#
foreach (var testCase in testCases)
{
#>
[TestMethod]
public void Generated_<#= testCase.Name #>()
{
//Put your Arrange & Act code here
Assert.AreEqual(
expected: <#= testCase.Expected #>
actual: <#= testCase.Expected #>);
}
<#
}
#>
}
}
当您保存时,您将有一个*.generated.cs(其中*与*.tt相同),其中包含所有测试。