コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }