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

ExactCountConstraint

ExactCountConstraint applies another constraint to each item in a collection, succeeding only if a specified number of items succeed.
using NUnit.Framework.Internal; using System; using System.Collections; using System.Collections.ObjectModel; namespace NUnit.Framework.Constraints { public class ExactCountConstraint : Constraint { private readonly int _expectedCount; private readonly IConstraint _itemConstraint; public override string Description { get { string text = (_expectedCount == 0) ? "no item" : ((_expectedCount == 1) ? "exactly one item" : $"""{_expectedCount}"""); if (_itemConstraint == null) return text; return PrefixConstraint.FormatDescription(text, _itemConstraint); } } public ExactCountConstraint(int expectedCount) : base(Array.Empty<object>()) { _expectedCount = expectedCount; } public ExactCountConstraint(int expectedCount, IConstraint itemConstraint) : base(itemConstraint) { Guard.ArgumentNotNull(itemConstraint, "itemConstraint"); _itemConstraint = itemConstraint.Resolve(); _expectedCount = expectedCount; } public override ConstraintResult ApplyTo<TActual>(TActual actual) { IEnumerable enumerable = ConstraintUtils.RequireActual<IEnumerable>(actual, "actual", false); Collection<object> collection = new Collection<object>(); int num = 0; foreach (object item in enumerable) { if (_itemConstraint != null) { if (_itemConstraint.ApplyTo(item).IsSuccess) num++; } else num++; if (collection.Count <= 10) collection.Add(item); } return new ExactCountConstraintResult(this, actual, num == _expectedCount, num, collection); } } }