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

TestSuiteResult

public class TestSuiteResult : TestResult
Represents the result of running a test suite
using NUnit.Framework.Interfaces; using System.Collections.Concurrent; using System.Collections.Generic; using System.Runtime.CompilerServices; namespace NUnit.Framework.Internal { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] public class TestSuiteResult : TestResult { private int _passCount; private int _failCount; private int _warningCount; private int _skipCount; private int _inconclusiveCount; private int _totalCount; private readonly ConcurrentQueue<ITestResult> _children = new ConcurrentQueue<ITestResult>(); public override int TotalCount { get { RwLock.EnterReadLock(); try { return _totalCount; } finally { RwLock.ExitReadLock(); } } } public override int FailCount { get { RwLock.EnterReadLock(); try { return _failCount; } finally { RwLock.ExitReadLock(); } } } public override int PassCount { get { RwLock.EnterReadLock(); try { return _passCount; } finally { RwLock.ExitReadLock(); } } } public override int WarningCount { get { RwLock.EnterReadLock(); try { return _warningCount; } finally { RwLock.ExitReadLock(); } } } public override int SkipCount { get { RwLock.EnterReadLock(); try { return _skipCount; } finally { RwLock.ExitReadLock(); } } } public override int InconclusiveCount { get { RwLock.EnterReadLock(); try { return _inconclusiveCount; } finally { RwLock.ExitReadLock(); } } } public override bool HasChildren => !_children.IsEmpty; public override IEnumerable<ITestResult> Children => _children; public TestSuiteResult(TestSuite suite) : base(suite) { } public virtual void AddResult(ITestResult result) { _children.Enqueue(result); RwLock.EnterWriteLock(); try { MergeChildResult(result); } finally { RwLock.ExitWriteLock(); } } 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; _totalCount += childResult.PassCount + childResult.FailCount + childResult.SkipCount + childResult.InconclusiveCount + childResult.WarningCount; } 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(ResultState.ChildWarning, TestResult.CHILD_WARNINGS_MESSAGE); break; case TestStatus.Failed: if (childResultState.Label == "Cancelled") SetResult(ResultState.Cancelled, "Test run cancelled by user"); else 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.ChildIgnored, TestResult.CHILD_IGNORE_MESSAGE); break; } } } }