<PackageReference Include="NUnit" Version="3.0.0-rc-2" />

DefaultSuiteBuilder

Built-in SuiteBuilder for all types of test classes.
using NUnit.Framework.Interfaces; using System; using System.Collections.Generic; using System.Reflection; namespace NUnit.Framework.Internal.Builders { public class DefaultSuiteBuilder : ISuiteBuilder { private NUnitTestFixtureBuilder _defaultBuilder = new NUnitTestFixtureBuilder(); public bool CanBuildFrom(ITypeInfo typeInfo) { if (typeInfo.IsAbstract && !typeInfo.IsSealed) return false; if (typeInfo.IsDefined<IFixtureBuilder>(true)) return true; if (typeInfo.IsGenericTypeDefinition) return false; return typeInfo.HasMethodWithAttribute(typeof(IImplyFixture)); } public TestSuite BuildFrom(ITypeInfo typeInfo) { List<TestSuite> list = new List<TestSuite>(); try { IFixtureBuilder[] fixtureBuilderAttributes = GetFixtureBuilderAttributes(typeInfo); for (int i = 0; i < fixtureBuilderAttributes.Length; i++) { foreach (TestSuite item in fixtureBuilderAttributes[i].BuildFrom(typeInfo)) { list.Add(item); } } if (!typeInfo.IsGenericType) { switch (list.Count) { case 0: return _defaultBuilder.BuildFrom(typeInfo); case 1: return list[0]; default: return BuildMultipleFixtures(typeInfo, list); } } return BuildMultipleFixtures(typeInfo, list); } catch (Exception ex) { Exception ex2 = ex; TestFixture obj = new TestFixture(typeInfo) { RunState = RunState.NotRunnable }; if (ex2 is TargetInvocationException) ex2 = ex2.InnerException; string value = "An exception was thrown while loading the test." + Env.NewLine + ex2.ToString(); obj.Properties.Add("_SKIPREASON", value); return obj; } } private TestSuite BuildMultipleFixtures(ITypeInfo typeInfo, IEnumerable<TestSuite> fixtures) { TestSuite testSuite = new ParameterizedFixtureSuite(typeInfo); foreach (TestSuite fixture in fixtures) { testSuite.Add(fixture); } return testSuite; } private IFixtureBuilder[] GetFixtureBuilderAttributes(ITypeInfo typeInfo) { IFixtureBuilder[] array = new IFixtureBuilder[0]; while (typeInfo != null && !typeInfo.IsType(typeof(object))) { array = typeInfo.GetCustomAttributes<IFixtureBuilder>(false); if (array.Length != 0) { if (array.Length == 1) return array; int num = 0; IFixtureBuilder[] array2 = array; foreach (IFixtureBuilder attr in array2) { if (HasArguments(attr)) num++; } if (num == array.Length) return array; if (num == 0) return new IFixtureBuilder[1] { array[0] }; IFixtureBuilder[] array3 = new IFixtureBuilder[num]; int num2 = 0; array2 = array; foreach (IFixtureBuilder fixtureBuilder in array2) { if (HasArguments(fixtureBuilder)) array3[num2++] = fixtureBuilder; } return array3; } typeInfo = typeInfo.BaseType; } return array; } private bool HasArguments(IFixtureBuilder attr) { TestFixtureAttribute testFixtureAttribute = attr as TestFixtureAttribute; if (testFixtureAttribute != null && testFixtureAttribute.Arguments.Length == 0) return testFixtureAttribute.TypeArgs.Length != 0; return true; } } }