VS2015 MSTest使用[ClassInitialize]时断点无法命中如何解决
首先你遇到的断点无法命中的核心原因是**[ClassInitialize]特性修饰的方法不符合MSTest框架的签名要求**:[TestInitialize]要求修饰实例无参方法,和你编写的代码匹配所以可以正常执行;而[ClassInitialize]有强制的签名约束,不符合要求的方法不会被测试框架调用,自然无法命中设置的断点。
解决方案
1. 修正[ClassInitialize]方法签名
MSTest要求被[ClassInitialize]修饰的方法必须同时满足以下要求:
- 是
public修饰的公共方法 - 是
static静态方法 - 返回值为
void - 有且仅有一个
TestContext类型的入参
同时测试类本身必须添加[TestClass]特性,否则框架不会识别内部的测试相关方法,修正后的代码示例如下:
[TestClass] public class YourTestClass { [ClassInitialize] public static void Exe20_Run(TestContext testContext) { // 你的业务逻辑 } // 其他测试方法 [TestMethod] public void TestSample() { // 测试逻辑 } }
2. 其他排查路径
如果修正签名后依然无法命中断点,按以下步骤排查:
- 清理整个解决方案的bin、obj目录后重新生成,确保调试符号(.pdb)文件是最新版本
- 打开测试资源管理器,右键对应测试用例选择「调试测试」,不要直接点击运行按钮后再手动附加调试器
- 检查VS调试设置:工具→选项→调试→常规,确认「要求源文件与原始版本完全匹配」选项未被勾选
- 单个测试类仅允许存在一个被[ClassInitialize]修饰的方法,存在多个时所有ClassInitialize方法都不会被执行
内容的提问来源于stack exchange,提问作者Liat
相关产品推荐
相关产品推荐

