ArchiMetrics.CodeReview.Rules.Code.MultipleAssertsInTestErrorRule.EvaluateImpl C# (CSharp) Метод

EvaluateImpl() защищенный Метод

protected EvaluateImpl ( Microsoft.CodeAnalysis.SyntaxNode node ) : EvaluationResult
node Microsoft.CodeAnalysis.SyntaxNode
Результат EvaluationResult
		protected override EvaluationResult EvaluateImpl(SyntaxNode node)
		{
			var methodDeclaration = (MethodDeclarationSyntax)node;

			if (methodDeclaration.AttributeLists.Any(l => l.Attributes.Any(a => a.Name is SimpleNameSyntax && ((SimpleNameSyntax)a.Name).Identifier.ValueText == "TestMethod")))
			{
				var accessExpressionSyntaxes = methodDeclaration.DescendantNodes()
					.OfType<MemberAccessExpressionSyntax>()
					.AsArray();

				var assertsFound = accessExpressionSyntaxes
													.Select(x => x.Expression as SimpleNameSyntax)
													.Where(x => x != null)
													.Count(x => x.Identifier.ValueText == "Assert" || x.Identifier.ValueText == "ExceptionAssert");
				var mockVerifyFound = accessExpressionSyntaxes
													   .Count(x => x.Name.Identifier.ValueText == "Verify" || x.Name.Identifier.ValueText == "VerifySet" || x.Name.Identifier.ValueText == "VerifyGet");
				var expectedExceptions =
					methodDeclaration.AttributeLists.Count(
						l =>
						l.Attributes.Any(a => a.Name is SimpleNameSyntax && ((SimpleNameSyntax)a.Name).Identifier.ValueText == "ExpectedException"));

				var total = assertsFound + mockVerifyFound + expectedExceptions;
				return total != 1
						   ? new EvaluationResult
								 {
									 Snippet = node.ToFullString(),
									 ErrorCount = total
								 }
						   : null;
			}

			return null;
		}
	}
MultipleAssertsInTestErrorRule