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

TestSuiteResult

public class TestSuiteResult : TestResult
Represents the result of running a test suite
using NUnit.Framework.Interfaces; using System; using System.Collections.Concurrent; 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 ConcurrentQueue<ITestResult> _children; 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) { _children = new ConcurrentQueue<ITestResult>(); } public virtual void AddResult(ITestResult result) { ConcurrentQueue<ITestResult> concurrentQueue = Children as ConcurrentQueue<ITestResult>; if (concurrentQueue != null) concurrentQueue.Enqueue(result); else { IList<ITestResult> list = Children as IList<ITestResult>; if (list == null) throw new NotSupportedException("cannot add results to Children"); list.Add(result); } RwLock.EnterWriteLock(); try { if (base.ResultState != ResultState.Cancelled) { switch (result.ResultState.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(result.ResultState, 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 (result.ResultState.Label == "Ignored" && (base.ResultState.Status == TestStatus.Inconclusive || base.ResultState.Status == TestStatus.Passed)) SetResult(ResultState.Ignored, TestResult.CHILD_IGNORE_MESSAGE); break; } } InternalAssertCount += result.AssertCount; _passCount += result.PassCount; _failCount += result.FailCount; _warningCount += result.WarningCount; _skipCount += result.SkipCount; _inconclusiveCount += result.InconclusiveCount; } finally { RwLock.ExitWriteLock(); } } } }