XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension.NetCore.XUnit

【DLL】提供方便快捷的测试,无需编写Main方法,可直接添加特性在类或方法上进行测试

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFEExtension.NetCore.XUnit

添加错误分析器的静态方法分析功能

ed2822d
XFE工作室室长 <mail@xfegzs.com>
提交于

代码差异

7 个文件 +104 -5
Added XFE各类拓展.NetCore.XUnit.Analyzer/AnalyzerReleases.Shipped.md +3 -0
@@ -0,0 +1,3 @@
1 ; Shipped analyzer releases
2 ; https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md
3
Added XFE各类拓展.NetCore.XUnit.Analyzer/AnalyzerReleases.Unshipped.md +8 -0
@@ -0,0 +1,8 @@
1 ; Unshipped analyzer release
2 ; https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md
3
4 ### New Rules
5
6 Rule ID | Category | Severity | Notes
7 --------|----------|----------|-------
8 XFE0001 | XFE各类拓展.NetCore.XUnit.Analyzer | Error | XUnitCodeAnalyzer
Added XFE各类拓展.NetCore.XUnit.Analyzer/XUnitCodeAnalyzer.cs +54 -0
@@ -0,0 +1,54 @@
1 using Microsoft.CodeAnalysis;
2 using Microsoft.CodeAnalysis.CSharp;
3 using Microsoft.CodeAnalysis.CSharp.Syntax;
4 using System.Linq;
5
6 namespace XFE各类拓展.NetCore.XUnit.Analyzer
7 {
8 [Generator]
9 public class XUnitCodeAnalyzer : ISourceGenerator
10 {
11 public static readonly DiagnosticDescriptor SMTestError = new DiagnosticDescriptor("XFE0001",
12 "不能标记非静态方法",
13 "SMTest特性不能用在静态方法之外的地方:'{0}'",
14 "XFE各类拓展.NetCore.XUnit.Analyzer",
15 DiagnosticSeverity.Error,
16 true,
17 "SMTest特性不能用在静态方法之外的地方.",
18 null);
19 public void Initialize(GeneratorInitializationContext context)
20 {
21 }
22
23 public void Execute(GeneratorExecutionContext context)
24 {
25 AttributeAnalyzer(context);
26 }
27 public static void AttributeAnalyzer(GeneratorExecutionContext context)
28 {
29 var syntaxTrees = context.Compilation.SyntaxTrees;
30 foreach (var syntaxTree in syntaxTrees)
31 {
32 var root = syntaxTree.GetRoot();
33 var classes = root.DescendantNodes().OfType<ClassDeclarationSyntax>();
34 var methodDeclarations = root.DescendantNodes().OfType<MethodDeclarationSyntax>();
35 foreach (var methodDeclaration in methodDeclarations)
36 {
37 var modifiers = methodDeclaration.Modifiers;
38 bool isStatic = modifiers.Any(modifier => modifier.IsKind(SyntaxKind.StaticKeyword));
39 if (isStatic)
40 continue;
41 var methodName = methodDeclaration.Identifier.ValueText;
42 var attributes = methodDeclaration.AttributeLists.SelectMany(attributeList => attributeList.Attributes);
43 foreach (var attribute in attributes)
44 {
45 if (attribute.Name.ToString() != "SMTest")
46 continue;
47 var diagnostic = Diagnostic.Create(SMTestError, attribute.GetLocation(), methodName);
48 context.ReportDiagnostic(diagnostic);
49 }
50 }
51 }
52 }
53 }
54 }
Modified XFE各类拓展.NetCore.XUnit.Analyzer/XUnitCodeGenerator.cs +1 -3
@@ -11,9 +11,7 @@ namespace XFE各类拓展.NetCore.XUnit
11 11
12 12 public void Execute(GeneratorExecutionContext context)
13 13 {
14 string source = $@"global using XFE各类拓展.NetCore.XUnit;
15
16 namespace XFE各类拓展.NetCore.XUnit
14 string source = $@"namespace XFE各类拓展.NetCore.XUnit
17 15 {{
18 16 public static class XUnitCode
19 17 {{
Added XFE各类拓展.NetCore.XUnit.Test/Program.cs +10 -0
@@ -0,0 +1,10 @@
1 namespace XFE各类拓展.NetCore.XUnit.Test;
2
3 class Program
4 {
5 [SMTest]
6 static void MainTest()
7 {
8 Console.WriteLine("Hello World!");
9 }
10 }
Added XFE各类拓展.NetCore.XUnit.Test/XFE各类拓展.NetCore.XUnit.Test.csproj +20 -0
@@ -0,0 +1,20 @@
1 <Project Sdk="Microsoft.NET.Sdk">
2
3 <PropertyGroup>
4 <OutputType>Exe</OutputType>
5 <TargetFramework>net8.0</TargetFramework>
6 <ImplicitUsings>enable</ImplicitUsings>
7 <Nullable>enable</Nullable>
8 </PropertyGroup>
9
10 <ItemGroup>
11 <ProjectReference Include="..\XFE各类拓展.NetCore.XUnit.Analyzer\XFE各类拓展.NetCore.XUnit.Analyzer.csproj"
12 OutputItemType="Analyzer"
13 ReferenceOutputAssembly="false" />
14 </ItemGroup>
15
16 <ItemGroup>
17 <PackageReference Include="XFE各类拓展.NetCore" Version="1.5.3" />
18 </ItemGroup>
19
20 </Project>
Modified XFE各类拓展.NetCore.XUnit.sln +8 -2
@@ -3,12 +3,14 @@ Microsoft Visual Studio Solution File, Format Version 12.00
3 3 # Visual Studio Version 17
4 4 VisualStudioVersion = 17.8.34525.116
5 5 MinimumVisualStudioVersion = 10.0.40219.1
6 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XFE各类拓展.NetCore.XUnit", "XFE各类拓展.NetCore.XUnit\XFE各类拓展.NetCore.XUnit.csproj", "{024C8A43-C965-48EC-A6B8-A06765698D4D}"
6 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XFE各类拓展.NetCore.XUnit", "XFE各类拓展.NetCore.XUnit\XFE各类拓展.NetCore.XUnit.csproj", "{024C8A43-C965-48EC-A6B8-A06765698D4D}"
7 7 ProjectSection(ProjectDependencies) = postProject
8 8 {4E353122-756D-4DBF-A97B-F364DDB2BF5F} = {4E353122-756D-4DBF-A97B-F364DDB2BF5F}
9 9 EndProjectSection
10 10 EndProject
11 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XFE各类拓展.NetCore.XUnit.Analyzer", "XFE各类拓展.NetCore.XUnit.Analyzer\XFE各类拓展.NetCore.XUnit.Analyzer.csproj", "{4E353122-756D-4DBF-A97B-F364DDB2BF5F}"
11 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XFE各类拓展.NetCore.XUnit.Analyzer", "XFE各类拓展.NetCore.XUnit.Analyzer\XFE各类拓展.NetCore.XUnit.Analyzer.csproj", "{4E353122-756D-4DBF-A97B-F364DDB2BF5F}"
12 EndProject
13 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XFE各类拓展.NetCore.XUnit.Test", "XFE各类拓展.NetCore.XUnit.Test\XFE各类拓展.NetCore.XUnit.Test.csproj", "{0D786DCC-9157-4F27-BBA8-247BFED38F4B}"
12 14 EndProject
13 15 Global
14 16 GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -24,6 +26,10 @@ Global
24 26 {4E353122-756D-4DBF-A97B-F364DDB2BF5F}.Debug|Any CPU.Build.0 = Debug|Any CPU
25 27 {4E353122-756D-4DBF-A97B-F364DDB2BF5F}.Release|Any CPU.ActiveCfg = Release|Any CPU
26 28 {4E353122-756D-4DBF-A97B-F364DDB2BF5F}.Release|Any CPU.Build.0 = Release|Any CPU
29 {0D786DCC-9157-4F27-BBA8-247BFED38F4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
30 {0D786DCC-9157-4F27-BBA8-247BFED38F4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
31 {0D786DCC-9157-4F27-BBA8-247BFED38F4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
32 {0D786DCC-9157-4F27-BBA8-247BFED38F4B}.Release|Any CPU.Build.0 = Release|Any CPU
27 33 EndGlobalSection
28 34 GlobalSection(SolutionProperties) = preSolution
29 35 HideSolutionNode = FALSE