用途:分析 .NET 测试代码的可维护性,找出重复样板、复制粘贴的测试方法以及跨测试方法和类的结构性重复,输出重构机会报告(含具体 before/after 建议)。该技能只做分析,不修改任何文件。
适用时机:用户要求在测试中查找重复代码或样板;想知道哪里可以 DRY 化;要求减少测试重复、提升可读性或清理样板;索要测试套件的重构机会;识别共享 setup/teardown 候选项;询问“测试中重复出现哪些模式”;希望集中测试数据、引入 builder 或 helper。
不适用:从零编写新测试;检测反模式或代码异味;实际执行重构(该技能只分析)。
输入:测试代码(必需,一个或多个测试文件或测试项目目录);生产代码(可选,用于判断哪些抽象有帮助);范围(可选,单类内还是跨类)。
工作流:读取所有测试文件,按框架标记扫描(MSTest 用 [TestClass]、[TestMethod]/[DataTestMethod];xUnit 无类标记,方法用 [Fact]、[Theory];NUnit 用 [TestFixture],方法用 [Test]、[TestCase]、[TestCaseSource];TUnit 无类标记,方法用 [Test])。随后识别五类问题:重复对象构造(同一对象在 3+ 测试中以相同参数构造,可用工厂方法、共享初始化或 builder 重构);重复断言模式(同一断言序列出现 3+ 次,可抽自定义断言 helper 或 Verify 方法);复制粘贴的测试方法(仅输入或单个参数不同的近似方法,可合并为 [DataRow]/[InlineData]/[TestCase],复杂输入用 [DynamicData]/[MemberData]/[TestCaseSource];编译期常量优先 [DataRow] 并加 DisplayName);重复 setup/teardown(同类体重复的初始化/清理,可抽共享基类、fixture 或上下文工厂);重复测试基础设施(相同 mock 配置、HttpClient/DelegatingHandler、日志配置,可抽 fixture、可复用 fake 或 test harness)。
校准规则:仅报告出现 3+ 次的问题;不标记简单构造(如 new Calculator());尊重刻意保持自包含的冗长写法;区分 AAA 结构性相似与真实代码重复;注意 helper 共享带来的耦合半径;测试已良好维护时应如实说明。
报告结构:摘要(按类别统计发现的模式数);按类别的发现(位置、代表样例、重构建议与前后对比、预计影响);重构优先级(按出现次数、重复代码复杂度、风险排序);权衡(可读性收益、局部性损失、是否值得)。
限制:仅分析不修改文件;出现次数阈值 3+;不标记简单构造;优先组合而非继承;每次抽取都会引入间接性,需说明权衡;共享可变状态会使测试耦合。具体安装命令与调用方式暂未提供。