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

DefaultTestCaseBuilder

Class to build ether a parameterized or a normal NUnitTestMethod. There are four cases that the builder must deal with: 1. The method needs no params and none are provided 2. The method needs params and they are provided 3. The method needs no params but they are provided in error 4. The method needs params but they are not provided This could have been done using two different builders, but it turned out to be simpler to have just one. The BuildFrom method takes a different branch depending on whether any parameters are provided, but all four cases are dealt with in lower-level methods
using NUnit.Framework.Interfaces; using System; using System.Collections.Generic; namespace NUnit.Framework.Internal.Builders { public class DefaultTestCaseBuilder : ITestCaseBuilder { private NUnitTestCaseBuilder _nunitTestCaseBuilder = new NUnitTestCaseBuilder(); public bool CanBuildFrom(IMethodInfo method) { if (!method.IsDefined<ITestBuilder>(false)) return method.IsDefined<ISimpleTestBuilder>(false); return true; } public Test BuildFrom(IMethodInfo method) { return BuildFrom(method, null); } public bool CanBuildFrom(IMethodInfo method, Test parentSuite) { return CanBuildFrom(method); } public Test BuildFrom(IMethodInfo method, Test parentSuite) { List<TestMethod> list = new List<TestMethod>(); List<ITestBuilder> list2 = new List<ITestBuilder>(method.GetCustomAttributes<ITestBuilder>(false)); bool flag = true; List<ITestBuilder>.Enumerator enumerator = list2.GetEnumerator(); try { while (enumerator.MoveNext()) { if (enumerator.Current is CombiningStrategyAttribute) flag = false; } } finally { ((IDisposable)enumerator).Dispose(); } bool flag2 = list2.Count > 0; if (flag) list2.Add(new CombinatorialAttribute()); enumerator = list2.GetEnumerator(); try { while (enumerator.MoveNext()) { foreach (TestMethod item in enumerator.Current.BuildFrom(method, parentSuite)) { list.Add(item); } } } finally { ((IDisposable)enumerator).Dispose(); } if ((!flag2 || method.GetParameters().Length == 0) && list.Count <= 0) return BuildSingleTestMethod(method, parentSuite); return BuildParameterizedMethodSuite(method, list); } private Test BuildParameterizedMethodSuite(IMethodInfo method, IEnumerable<TestMethod> tests) { ParameterizedMethodSuite parameterizedMethodSuite = new ParameterizedMethodSuite(method); parameterizedMethodSuite.ApplyAttributesToTest(method.MethodInfo); foreach (TestMethod test in tests) { parameterizedMethodSuite.Add(test); } return parameterizedMethodSuite; } private Test BuildSingleTestMethod(IMethodInfo method, Test suite) { ISimpleTestBuilder[] customAttributes = method.GetCustomAttributes<ISimpleTestBuilder>(false); if (customAttributes.Length == 0) return _nunitTestCaseBuilder.BuildTestMethod(method, suite, null); return customAttributes[0].BuildFrom(method, suite); } } }