public IEnumerable <SyntaxNode> GetSetupMethodBodyMembers(ClassDeclarationSyntax classUnderTestDec, SyntaxGenerator generator) { var constructorParameters = _constructorParametersExtractor.GetParametersOfConstructor(classUnderTestDec).ToList(); var expressionStatements = constructorParameters.Select(_ => _expressionStatementGenerator.MoqStubAssignmentExpression( _.Type.ToString(), _fieldNameGenerator.GetFromParameter(_), generator)); var fieldDeclarations = constructorParameters.Select(_ => _fieldNameGenerator.GetFromParameter(_)); var classUnderTestName = classUnderTestDec.Identifier.Text; var expressionStatementTargetInstantiation = _expressionStatementGenerator.MoqTargetObjectAssignmentExpression(fieldDeclarations, classUnderTestName, generator); var setupBody = new List <SyntaxNode>(); setupBody.AddRange(expressionStatements); setupBody.Add(expressionStatementTargetInstantiation); return(setupBody); }
public async Task <Document> RegenerateSetup(Document document, ClassDeclarationSyntax testClass, CancellationToken cancellationToken) { try { var generator = SyntaxGenerator.GetGenerator(document); var testProjectName = document.Project.Name; var testClassName = testClass.Identifier.Text; var classUnderTestName = _classUnderTestNameFinder.GetClassUnderTestName(testClassName); var classUnderTest = await _classUnderTestFinder.GetAsync(document.Project.Solution, testProjectName, classUnderTestName); if (classUnderTest == null) { return(document); } var constructorBody = _setupMethodBodyGenerator.GetSetupMethodBodyMembers(classUnderTest.ClassDeclarationSyntax, generator); var newConstructor = _constructorGenerator.Constructor(testClassName, constructorBody, generator); var constructorParameters = _constructorParametersExtractor.GetParametersOfConstructor(classUnderTest.ClassDeclarationSyntax).ToList(); var genericSymbolForMoq = "Mock"; var fieldDeclarations = constructorParameters.Select(_ => _fieldDeclarationGenerator.GetGenericFieldDeclaration(_, genericSymbolForMoq, generator)).ToList(); fieldDeclarations.Add(_fieldDeclarationGenerator.GetTargetFieldDeclaration(classUnderTestName, generator)); var namespaceForMoq = "Moq"; var semanticModel = classUnderTest.SemanticModel; var usings = _usingDirectivesGenerator.UsingDirectives(semanticModel.Compilation, constructorParameters, new[] { namespaceForMoq }, generator); var newDocument = await new DocumentBuilder(_memberFinder, _fieldFinder, document, testClass) .WithSetupMethod(newConstructor) .WithFields(fieldDeclarations) .WithUsings(usings) .BuildAsync(cancellationToken); return(newDocument); } catch { return(document); } }