VS2010中的测试(3)——数据驱动单元测试
当我们同一条测试用例根据不同的输入数据运行多次测试。为了不重复写单元测试代码。vs为我们提供了数据驱动的测试方法,数据源的文件格式可以是csv、xml、SQL Server数据库或者Orcle数据库等。
我们先来看看我们要被测试的方法:
using System;
namespace ConsoleApplicationUnitTest
{
public class UnitTest
{
public double CalculateTotalPrice(double quantity)
{
double totalPrice;
double unitPrice;
unitPrice = 16.0;
totalPrice = unitPrice * quantity;
return totalPrice;
}
}
}
同样我们也是按照平常的方法创建一个单元测试,如下:
/// <summary>
///CalculateTotalPrice 的测试
///</summary>
[TestMethod()]
public void CalculateTotalPriceTest()
{
UnitTest target = new UnitTest(); // TODO: 初始化为适当的值
double quantity = 10.0F; // TODO: 初始化为适当的值
double expected = 160F; // TODO: 初始化为适当的值
double actual;
actual = target.CalculateTotalPrice(quantity);
Assert.AreEqual(expected, actual);
//Assert.Inconclusive("验证此测试方法的正确性。");
}
下面我们创建一个测试用例的数据源,打开Excel,创建一个CSV文件。输入如下的数据行。然后保存为.csv文件。
创建好数据源之后,我们就要转到测试工程中,然后打开测试视图或者测试列表编辑窗口。选中我们要连接的数据源的测试用例,右键属性,然后点击数据连接字符串,它会弹出一个连接向导,选择我们的CSV文件,然后选择刚刚保存的csv文件。选择完成之后,该测试用例的属性就会被使用到:
这时候我们的数据测试文件已经被复制到项目中。
然后我们看我们的测试函数上已经多加了几个特性。我们重新修改一下单元测试代码:
/// <summary>
///CalculateTotalPrice 的测试
///</summary>
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV",
"|DataDirectory|\\testData.csv",
"testData#csv", DataAccessMethod.Sequential),
DeploymentItem("TestProject\\testData.csv"), TestMethod()]
public void CalculateTotalPriceTest()
{
UnitTest target = new UnitTest(); // TODO: 初始化为适当的值
// double quantity = 10.0F; // TODO: 初始化为适当的值
double quantity = Convert.ToDouble(this.testContextInstance.DataRow["Quantity"]);
// double expected = 160F; // TODO: 初始化为适当的值
double expected = Convert.ToDouble(this.testContextInstance.DataRow["ExpectedPrice"]);
double actual;
actual = target.CalculateTotalPrice(quantity);
Assert.AreEqual(expected, actual);
//Assert.Inconclusive("验证此测试方法的正确性。");
}
最后我们运行一下我们的测试用例,结果就是我们看到它在运行结果里面还有每一行数据的运行结果。如果其中一行数据失败,那我们的整体结果就是失败的。我们双击其中一行的结果还能进一步查看它运行的详情。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构