You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为MSTest实现自定义[TestWithCheats]特性?(RELEASE模式跳过测试)

解决MSTest中[TestWithCheats]特性在RELEASE配置下跳过测试且不判定失败的问题

你遇到的核心问题是Assert.Inconclusive在Jenkins的测试运行器中会被判定为失败,而非预期的“跳过”状态。要实现RELEASE配置下跳过测试、DEBUG配置下强制执行的需求,更可靠的方式是自定义特性,直接基于编译配置控制测试的执行状态。


自定义TestWithCheats特性

通过条件编译让特性在不同配置下继承不同的基类:

  • DEBUG配置(定义ALLOW_CHEATS):特性继承自TestAttribute,测试正常执行
  • RELEASE配置(未定义ALLOW_CHEATS):特性继承自IgnoreAttribute,测试被标记为跳过,不会触发失败

代码实现:

#if ALLOW_CHEATS
using Microsoft.VisualStudio.TestTools.UnitTesting;

public class TestWithCheatsAttribute : TestAttribute
{
}
#else
using Microsoft.VisualStudio.TestTools.UnitTesting;

public class TestWithCheatsAttribute : IgnoreAttribute
{
    public TestWithCheatsAttribute() 
        : base("Skipping cheat tests in Release mode.")
    {
    }
}
#endif

配置编译符号

确保你的项目在DEBUG配置中定义了ALLOW_CHEATS:

  1. 右键项目 → 属性 → 生成
  2. 选择“Debug”配置
  3. 在“条件编译符号”中添加ALLOW_CHEATS(多个符号用分号分隔)

使用特性标记测试方法

直接给需要控制的测试方法添加[TestWithCheats]特性即可:

[TestClass]
public class CheatTests
{
    [TestWithCheats]
    public void TriggerFreeSpinsRejectCashout()
    {
        // 你的测试逻辑代码
    }
}

方案优势

  • 无需在测试方法中添加额外的Helper调用代码,代码更简洁
  • 利用MSTest原生的IgnoreAttribute标记跳过,测试运行器(包括Jenkins)会正确识别为“跳过”而非“失败”
  • 完全通过编译配置自动切换行为,无需手动修改测试逻辑

内容的提问来源于stack exchange,提问作者Terentiy Gatsukov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:42:23