Roslyn C# CodeFix单元测试因‘Project不相等’失败求助
解决CodeFixTest中fixedProject与project不相等导致的测试失败问题
检查CodeFix的项目更新逻辑
CodeFixTest<TVerifier>.FixEachAnalyzerDiagnosticAsync会循环应用修复直到无新修改,但如果你的CodeFix每次应用都生成新的Project实例(哪怕内容符合预期),就会触发fixedProject != project判断,导致循环无法终止。确认是否在不必要的场景下重建了Project对象,应该仅修改目标文档内容而非重新生成整个Project。排查文档内容的细微差异
即使你认为输出和预期一致,也可能存在空格、换行、缩进或隐藏字符的细微差别,这些会让Roslyn生成新的Project实例。可以在测试中添加代码,将fixedProject的文档内容与预期内容逐字符对比,定位差异点。调整测试的修复应用逻辑
如果你的CodeFix只需要执行一次修复,可以修改测试代码,跳过框架的循环判断,直接应用一次修复后验证结果:var fixedProject = await ApplyCodeActionAsync(project, actionToApply, verifier, cancellationToken).ConfigureAwait(false); // 直接验证fixedProject的文档内容是否符合预期核对Roslyn版本兼容性
VS Community 17.4.3对应特定的Roslyn版本,检查测试项目引用的Roslyn NuGet包版本是否与VS内置版本匹配,版本不一致可能导致Project实例的相等判断行为异常。
内容的提问来源于stack exchange,提问作者David Killian
相关产品推荐
相关产品推荐

