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

Visual Studio C#项目中如何强制遵循Microsoft Learn测试命名最佳实践?

解决方案

要实现强制单元测试方法遵循三段式命名规范,同时避免CA1707规则的冲突,你可以通过以下步骤修复.editorconfig配置:


1. 核心配置(完整.editorconfig代码)

直接替换或添加以下配置到项目根目录的.editorconfig文件中:

# 定义匹配测试方法的符号(适配主流测试框架:Xunit/NUnit/MSTest)
dotnet_naming_symbols.test_methods.applicable_kinds = method
dotnet_naming_symbols.test_methods.applicable_accessibilities = public, internal
dotnet_naming_symbols.test_methods.required_attributes = Xunit.FactAttribute;Xunit.TheoryAttribute;NUnit.Framework.TestAttribute;Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute
dotnet_naming_symbols.test_methods.name = test_methods

# 排除测试方法的CA1707规则(允许下划线)
dotnet_code_quality.CA1707.exclude = test_methods

# 强制测试方法遵循三段式命名(Action_Scenario_ExpectedResult),不符合则触发错误
dotnet_naming_rule.test_method_naming.rule = ^[A-Z][a-zA-Z0-9]+_[a-zA-Z0-9]+_[a-zA-Z0-9]+$
dotnet_naming_rule.test_method_naming.symbols = test_methods
dotnet_naming_rule.test_method_naming.style = regex_style
dotnet_naming_rule.test_method_naming.severity = error
dotnet_naming_rule.test_method_naming.title = 测试方法必须遵循Action_Scenario_ExpectedResult命名规范
dotnet_naming_rule.test_method_naming.description = 测试方法名格式示例:Add_SingleNumber_ReturnsSameNumber

# 确保非测试方法仍禁止下划线(保持原CA1707约束)
dotnet_naming_symbols.non_test_methods.applicable_kinds = method
dotnet_naming_symbols.non_test_methods.applicable_accessibilities = public, internal, private, protected, protected_internal
dotnet_naming_symbols.non_test_methods.excluded_attributes = Xunit.FactAttribute;Xunit.TheoryAttribute;NUnit.Framework.TestAttribute;Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute
dotnet_naming_symbols.non_test_methods.name = non_test_methods

dotnet_naming_rule.non_test_methods_no_underscores.rule = ^[^_]+$
dotnet_naming_rule.non_test_methods_no_underscores.symbols = non_test_methods
dotnet_naming_rule.non_test_methods_no_underscores.style = regex_style
dotnet_naming_rule.non_test_methods_no_underscores.severity = warning
dotnet_naming_rule.non_test_methods_no_underscores.title = 非测试方法名不能包含下划线

2. 为什么之前的配置无效?

  • 符号定义不精准:之前直接使用dotnet_test_methods预定义符号,不同测试框架的特性识别可能有偏差,手动定义基于测试特性的符号更可靠。
  • 规则类型错误:之前将style设为camel_case,但我们需要的是自定义正则匹配,应改为regex_style。
  • 正则不满足强制三段式:原正则允许单段或多段命名,新正则^[A-Z][a-zA-Z0-9]+_[a-zA-Z0-9]+_[a-zA-Z0-9]+$强制要求至少两个下划线(三段式结构)。
  • 级别过低:原配置severity为suggestion,不会触发错误,改为error才能强制约束贡献者。

3. 生效验证

  1. 保存.editorconfig后,重启Visual Studio或右键项目选择重新加载项目。
  2. 尝试创建不符合命名规范的测试方法(如AddNumber或Add_SingleNumber),此时会直接触发编译错误。
  3. 测试符合规范的命名(如Add_SingleNumber_ReturnsSameNumber),不会触发CA1707警告。

内容的提问来源于stack exchange,提问作者Brian Kessler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:45:36