public TestInfo[] Generate(string SourceCode) { SyntaxNode TreeRoot = CSharpSyntaxTree.ParseText(SourceCode).GetRoot(); List <TestInfo> result = new List <TestInfo>(); foreach (var SourceClass in TreeRoot.DescendantNodes().OfType <ClassDeclarationSyntax>()) { string ClassName = SourceClass.Identifier.ValueText; var methods = SourceClass.DescendantNodes().OfType <MethodDeclarationSyntax>().Where(method => method.Modifiers.Any(SyntaxKind.PublicKeyword)); NamespaceDeclarationSyntax NamespaceItem = SyntaxFactory.NamespaceDeclaration(SyntaxFactory.ParseName("UnitTests")); ClassDeclarationSyntax ClassItem = SyntaxFactory.ClassDeclaration($"{ClassName}Test"). AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword)). AddAttributeLists(SyntaxFactory.AttributeList(SyntaxFactory.AttributeList().Attributes.Add(TestClassAttribute))); var unit = SyntaxFactory.CompilationUnit(). AddUsings(FormUsings(TreeRoot)). AddMembers(NamespaceItem. AddMembers(ClassItem. AddMembers(FormMethods(methods) ))); result.Add(new TestInfo() { FileName = $"{ClassName}Test.cs", TestCode = unit.NormalizeWhitespace().ToFullString() }); } return(result.ToArray()); }