我有一个CodeFix,它在单元测试中“随机”应用。我对单个代码修复有46个单元测试,而20个失败。奇怪的是,当我查看文档时,在每种情况下我返回的文档在CodeFix末尾都是正确的。但是当我有时在ApplyFix的末尾看到文档正确而在其他时候则保持不变。
在退回文档之前,我曾尝试查看CodeFix末尾的文档。调用CodeAction.GetOperationsAsync之后,调用了RegisterCodeFixesAsync,然后看到它注册了此修复程序。然后,我看到我的修复程序已执行。接下来是ApplyFix中的第二行
Private Shared Function ApplyFix(document As Document, codeAction As CodeAction) As Document
Dim operations As ImmutableArray(Of CodeActionOperation) = codeAction.GetOperationsAsync(CancellationToken.None).Result
Dim solution As Solution = operations.OfType(Of ApplyChangesOperation).Single.ChangedSolution
Return solution.GetDocument(document.Id)
End Function
下面的代码总是被执行
context.RegisterCodeFix(CodeAction.Create(title, createChangedDocument:=Function(c As CancellationToken) AddAsClauseAsync(context.Document, DirectCast(declarationSyntax, VariableDeclaratorSyntax), c), equivalenceKey:=title), firstDiagnostic)
下一步将调用我的修复程序并返回已修复的文档
Dim NewDocument As Document = _Document.WithSyntaxRoot(newRoot)
Return NewDocument
在每种情况下,我希望当我查看solution.GetDocument(document.Id)时都会看到我的修复程序,但这仅在〜50%的测试中发生,失败的测试只会返回原始文档不变。