0

0

C# MSTest测试框架方法 C#如何使用MSTest

星降

星降

发布时间:2026-01-25 09:12:46

|

747人浏览过

|

来源于php中文网

原创

MSTestV2是当前推荐版本,需通过NuGet引入Microsoft.NET.Test.Sdk和MSTest.TestFramework包;测试类须标记[TestClass],方法须为public、无参、void或Task返回类型并标记[TestMethod];断言统一用Assert类,初始化/清理用[TestInitialize]/[TestCleanup]。

c# mstest测试框架方法 c#如何使用mstest

直接说结论:MSTest 是 Visual Studio 内置的测试框架,MSTestV2(即 Microsoft.NET.Test.Sdk + MSTest.TestFramework)是当前推荐版本,无需额外安装插件,但必须通过 NuGet 引入包,且类和方法需加特定特性才能被识别为测试。

如何标记一个方法为 MSTest 测试方法

只有带 [TestMethod] 特性的 public 无参实例方法才会被发现并执行。它必须定义在带 [TestClass] 特性的 public 类中——两者缺一不可。

常见错误现象:Test method not found 或测试资源管理器里不显示方法,大概率是忘了加 [TestClass],或方法是 private/static,或有参数。

  • [TestClass] 必须修饰类,不能是 structstatic class
  • [TestMethod] 方法不能有返回值(必须是 voidTask),也不能有参数
  • 若要异步测试,方法签名应为 public async Task MyTest(),并用 await

常用断言怎么写(Assert 类核心用法)

Assert 是 MSTest 的断言入口,所有校验都通过它完成。它不抛异常而是触发测试失败,且失败时会输出清晰上下文。

典型场景:验证返回值、异常是否抛出、集合是否包含某元素、浮点数近似相等。

  • 基本相等:Assert.AreEqual(expected, actual) —— 支持重载,对 double 可加 tolerance 参数
  • 引用相等(同一对象):Assert.AreSame(expected, actual)
  • 是否为 null:Assert.IsNull(obj) / Assert.IsNotNull(obj)
  • 是否抛出异常:Assert.ThrowsException(() => SomeMethod(null))
  • 集合校验:Assert.IsTrue(list.Contains("x")) 或更语义化的 CollectionAssert.Contains(list, "x")

测试初始化与清理([TestInitialize][TestCleanup]

每个测试方法运行前/后都会执行一次带这些特性的方法,适合做单次资源准备(如新建临时文件、初始化 mock 对象),注意它们也必须是 public 无参实例方法。

CA.LA
CA.LA

第一款时尚产品在线设计平台,服装设计系统

下载

容易踩的坑:误用 [ClassInitialize](整个类只执行一次,且所在方法必须是 static,还要加 [AssemblyInitialize] 才能跨类生效),导致状态污染或并发问题。

  • [TestInitialize] 在每个 [TestMethod] 前执行,适合构造新实例
  • [TestCleanup] 在每个 [TestMethod] 后执行,适合释放 IDisposable 资源
  • 不要在 [TestInitialize] 里做耗时操作(如连接数据库),会影响测试速度

运行 MSTest 需要哪些 NuGet 包

仅靠 Visual Studio 自带的测试引擎不够,必须显式添加两个关键包,否则编译通过但测试资源管理器里找不到任何测试。

缺少任一包都会出现 “No tests found” 或 “The test source file could not be loaded”。

  • Microsoft.NET.Test.Sdk:提供测试主机和构建集成(必需)
  • MSTest.TestFramework:提供 [TestClass]Assert 等 API(必需)
  • 可选:MSTest.TestAdapter(旧版需要,.NET 5+ 项目通常不需要单独装)

确认方式:检查 .csproj 中是否有类似以下内容:


版本建议对齐 VS 当前支持的最新稳定版;混用过高或过低版本可能引发 Could not load file or assembly 'MSTest.TestFramework'

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

234

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

437

2024.03.01

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

53

2025.08.29

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

101

2025.10.23

javascriptvoid(o)怎么解决
javascriptvoid(o)怎么解决

javascriptvoid(o)的解决办法:1、检查语法错误;2、确保正确的执行环境;3、检查其他代码的冲突;4、使用事件委托;5、使用其他绑定方式;6、检查外部资源等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

176

2023.11.23

java中void的含义
java中void的含义

本专题整合了Java中void的相关内容,阅读专题下面的文章了解更多详细内容。

98

2025.11.27

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

468

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

13

2025.12.06

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

41

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号