新闻中心

C# 如何进行单元测试_C# 单元测试编写与执行指南

2025-11-18
浏览次数:
返回列表
使用MSTest框架在Visual Studio中创建单元测试项目并编写测试类,通过[TestMethod]和[DataRow]等特性实现方法验证与参数化测试,利用Assert类进行结果断言,确保代码正确性。

c# 如何进行单元测试_c# 单元测试编写与执行指南

在 C# 开发中,单元测试是保障代码质量的关键环节。通过编写可重复执行的测试用例,开发者可以验证方法逻辑是否正确,降低引入 bug 的风险。本文将介绍如何使用 Visual Studio 内置的单元测试框架(MSTest)进行 C# 单元测试的编写与执行。

创建单元测试项目

在解决方案中添加一个专门用于测试的项目,便于组织和管理测试代码。

  • 右键点击解决方案 → 选择“添加” → “新建项目”
  • 搜索并选择“单元测试项目 (.NET Core)”或“MSTest 测试项目”
  • 命名测试项目,例如:MyApp.Tests
  • 创建后,该项目会自动引用 MSTest 框架

接着,在测试项目中添加对目标项目的引用:

  • 右键点击“引用” → “添加项目引用”
  • 勾选你要测试的主项目(如 MyApp)

编写第一个单元测试

假设你有一个简单的计算器类:

public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}

在测试项目中创建对应的测试类:

using Microsoft.VisualStudio.TestTools.UnitTesting;
<p>[TestClass]
public class CalculatorTests
{
[TestMethod]
public void Add_WhenGivenTwoNumbers_ShouldReturnCorrectSum()
{
// Arrange
var calculator = new Calculator();
int a = 5;
int b = 3;</p><pre class='brush:php;toolbar:false;'>    // Act
    int result = calculator.Add(a, b);

    // Assert
    Assert.AreEqual(8, result);
}

}

[TestClass] 标记测试类,[TestMethod] 标记具体测试方法。每个测试通常分为三部分:

Whimsical Whimsical

Whimsical推出的AI思维导图工具

Whimsical 182 查看详情 Whimsical
  • Arrange:准备输入数据和对象实例
  • Act:调用被测方法
  • Assert:验证结果是否符合预期

运行单元测试

Visual Studio 提供了多种方式运行测试:

  • 打开“测试资源管理器”(Test Explorer)窗口(菜单:测试 → 运行 → 所有测试)
  • 点击“全部运行”按钮,系统会编译并执行所有测试用例
  • 测试通过显示绿色对勾,失败则为红色叉号
  • 双击失败的测试可查看详细错误信息,比如期望值与实际值的差异

也可以右键某个测试方法,选择“运行选定测试”进行快速调试。

使用其他断言和测试特性

MSTest 提供丰富的断言方法来满足不同场景:

  • Assert.IsTrue(condition):判断条件是否为真
  • Assert.IsNull(object):验证对象为空
  • Assert.ThrowsException():验证方法是否抛出指定异常

示例:测试除零异常

[TestMethod]
public void Divide_ByZero_ShouldThrowDivideByZeroException()
{
    var calc = new Calculator();
<pre class='brush:php;toolbar:false;'>Assert.ThrowsException<DivideByZeroException>(() => calc.Divide(10, 0));

}

还可以使用 [DataRow] 实现参数化测试:

[DataTestMethod]
[DataRow(2, 3, 5)]
[DataRow(-1, 1, 0)]
[DataRow(0, 0, 0)]
public void Add_MultipleCases_ShouldReturnCorrectResult(int a, int b, int expected)
{
    var calc = new Calculator();
    int result = calc.Add(a, b);
    Assert.AreEqual(expected, result);
}

基本上就这些。掌握这些基础操作后,你可以逐步引入更复杂的测试场景,比如 Mock 对象(配合 Moq 框架)、异步测试等。C# 单元测试并不复杂,但坚持写测试会让代码更健壮、重构更有信心。

以上就是C# 如何进行单元测试_C# 单元测试编写与执行指南的详细内容,更多请关注其它相关文章!


# 还可以  # 杭州seo推荐运营  # seo计费系统oem  # 一站式营销推广话术模板  # 二类电商营销推广方式  # 优化seo公司外贸方案  # 金华seo知识  # 体育馆营销推广现状  # 南宁seo外链群发  # 宁波网站关键词排名价格  # 天津进口网站建设配置  # 第一个  # 你可以  # app  # 多语言  # 右键点击  # 化与  # 与非  # 如何实现  # 重构  # 单元测试  # .net  # c#  # microsoft  # 资源管理器 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 抖音DOU+怎么投最有效 抖音付费推广的ROI提升技巧  126邮箱网页版官方入口 126邮箱账号在线登录平台  地铁跑酷免费秒玩入口链接 地铁跑酷小游戏免费秒玩网站  QQ邮箱网页版快速登录 QQ邮箱邮箱账号官方入口地址  Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程  漫蛙漫画登录站点 漫蛙2正版漫画快速访问  Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】  Golang如何通过reflect获取匿名字段方法_Golang reflect匿名字段方法访问技巧  最新韩小圈网页版登录入口_官网在线观看官方链接  顺丰国际快递查询 国际件官方查询入口  CSS条件样式无法按设备触发怎么排查_media条件语句正确设置解决触发问题  “在文档元素之后找到了标记”是什么错误? 检查并修复XML中多个根元素的3个方法  谷歌google账号怎么注册账号 谷歌账号注册官方流程  Pandas DataFrame:高效添加条件计算列  QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用  在J*a里如何理解依赖关系的方向_依赖方向在模块结构中的作用  12306几点到几点不能订票? | 官方最新系统维护时间全解析  蛙漫画网页版全站入口 蛙漫热门作品免费浏览  Win11如何开启讲述人功能 Win11屏幕阅读器(讲述人)开启与关闭【教程】  LocoySpider如何部署到云服务器_LocoySpider云部署的远程配置  抖音从哪里进入网页版_抖音官方入口链接  漫蛙2漫画入口 漫蛙正版网页漫画直达网址  Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】  TypeScript/J*aScript:高效查找数组中首个唯一ID对象  C++如何实现一个装饰器模式_C++设计模式之动态地给对象添加额外职责  Discord Slash 命令响应超时问题的异步解决方案  如何仅使用CSS更改登录界面背景图像图标的颜色  Mac怎么锁定备忘录_Mac备忘录加密设置教程  c++中的std::launder有什么实际用途_c++对象生命周期与指针优化  解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException  sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤  Word2013如何插入视频和音频媒体_Word2013媒体插入的多媒体支持  怎样使用“本地安全策略”提升Windows安全性_Secpol.msc配置指南【高手】  包子漫画官方网站在线链接-包子漫画在线阅读平台主页地址  狙击外星人小游戏开始_狙击外星人小游戏立即开始  如何优雅地解决Livewire文件上传难题?SpatieLivewireFilepond让一切变得简单  J*a里如何使用forEach遍历Map_Map遍历方法说明  必由学官网快捷入口 必由学网页版在线学习平台  Mac怎么查看崩溃日志_Mac控制台错误报告分析  J*aScript设计模式实践_j*ascript代码优化  必由学官方平台入口 必由学在线课堂登录地址  Win10双系统截图高效法 截屏快捷键速记【技巧】  如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题  Python getattr() 异常处理深度解析:避免程序意外退出  Python Socket多播通信中指定源IP地址的实践指南  韩小圈电脑版在线入口_网页版免费登录地址  b站怎么看视频的弹幕数量_b站弹幕数量查看方法  Python中高效访问嵌套字典与列表中的键值对  微博网页版官方账号登录 微博网页版内容浏览使用指南  qq游戏免费畅玩入口_qq游戏电脑版快速启动 

搜索