Тестирование Roslyn codeAction с ошибочными результатами - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть 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% тестов, в случае неудачных тестов исходный документ просто возвращается без изменений.

...