<PackageReference Include="NUnit" Version="3.8.1" />

TestSuiteResult

public class TestSuiteResult : TestResult
Represents the result of running a test suite
using NUnit.Framework.Interfaces; using System.Collections.Generic; namespace NUnit.Framework.Internal { public class TestSuiteResult : TestResult { private int _passCount; private int _failCount; private int _warningCount; private int _skipCount; private int _inconclusiveCount; private List<ITestResult> _children; public override int FailCount => _failCount; public override int PassCount => _passCount; public override int WarningCount => _warningCount; public override int SkipCount => _skipCount; public override int InconclusiveCount => _inconclusiveCount; public override bool HasChildren => _children.Count != 0; public override IEnumerable<ITestResult> Children => _children; public TestSuiteResult(TestSuite suite) : base(suite) { _children = new List<ITestResult>(); } public virtual void AddResult(ITestResult result) { _children.Add(result); MergeChildResult(result); } private void MergeChildResult(ITestResult childResult) { if (base.ResultState != ResultState.Cancelled) UpdateResultState(childResult.ResultState); InternalAssertCount += childResult.AssertCount; _passCount += childResult.PassCount; _failCount += childResult.FailCount; _warningCount += childResult.WarningCount; _skipCount += childResult.SkipCount; _inconclusiveCount += childResult.InconclusiveCount; } private void UpdateResultState(ResultState childResultState) { switch (childResultState.Status) { case TestStatus.Passed: if (base.ResultState.Status == TestStatus.Inconclusive) SetResult(ResultState.Success); break; case TestStatus.Warning: if (base.ResultState.Status == TestStatus.Inconclusive || base.ResultState.Status == TestStatus.Passed) SetResult(childResultState, TestResult.CHILD_WARNINGS_MESSAGE); break; case TestStatus.Failed: if (base.ResultState.Status != TestStatus.Failed) SetResult(ResultState.ChildFailure, TestResult.CHILD_ERRORS_MESSAGE); break; case TestStatus.Skipped: if (childResultState.Label == "Ignored" && (base.ResultState.Status == TestStatus.Inconclusive || base.ResultState.Status == TestStatus.Passed)) SetResult(ResultState.Ignored, TestResult.CHILD_IGNORE_MESSAGE); break; } } } }