<PackageReference Include="NUnit" Version="3.0.0-alpha" />

DefaultTestAssemblyBuilder

DefaultTestAssemblyBuilder loads a single assembly and builds a TestSuite containing test fixtures present in the assembly.
using NUnit.Framework.Interfaces; using NUnit.Framework.Internal; using NUnit.Framework.Internal.Builders; using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; namespace NUnit.Framework.Api { public class DefaultTestAssemblyBuilder : ITestAssemblyBuilder { private static Logger log = InternalTrace.GetLogger(typeof(DefaultTestAssemblyBuilder)); private Assembly assembly; private ISuiteBuilder _defaultSuiteBuilder; public DefaultTestAssemblyBuilder() { _defaultSuiteBuilder = new DefaultSuiteBuilder(); } public ITest Build(Assembly assembly, IDictionary options) { log.Debug("Loading {0} in AppDomain {1}", assembly.FullName, AppDomain.CurrentDomain.FriendlyName); string assemblyPath = AssemblyHelper.GetAssemblyPath(assembly); return Build(assembly, assemblyPath, options); } public ITest Build(string assemblyName, IDictionary options) { log.Debug("Loading {0} in AppDomain {1}", assemblyName, AppDomain.CurrentDomain.FriendlyName); TestSuite testSuite = null; try { Assembly assembly = Load(assemblyName); return Build(assembly, assemblyName, options); } catch (Exception ex) { testSuite = new TestAssembly(assemblyName); testSuite.RunState = RunState.NotRunnable; testSuite.Properties.Set("_SKIPREASON", ex.Message); return testSuite; } } private TestSuite Build(Assembly assembly, string assemblyPath, IDictionary options) { this.assembly = assembly; TestSuite testSuite = null; try { IList names = options["LOAD"] as IList; IList fixtures = GetFixtures(assembly, names); return BuildTestAssembly(assembly, assemblyPath, fixtures); } catch (Exception ex) { testSuite = new TestAssembly(assemblyPath); testSuite.RunState = RunState.NotRunnable; testSuite.Properties.Set("_SKIPREASON", ex.Message); return testSuite; } } private Assembly Load(string path) { Assembly assembly = null; AssemblyName assemblyName = AssemblyName.GetAssemblyName(path); assembly = Assembly.Load(assemblyName); log.Info("Loaded assembly " + assembly.FullName); return assembly; } private IList GetFixtures(Assembly assembly, IList names) { List<Test> list = new List<Test>(); log.Debug("Examining assembly for test fixtures"); IList candidateFixtureTypes = GetCandidateFixtureTypes(assembly, names); log.Debug("Found {0} classes to examine", candidateFixtureTypes.Count); int num = 0; foreach (Type item in candidateFixtureTypes) { if (_defaultSuiteBuilder.CanBuildFrom(item)) { Test test = _defaultSuiteBuilder.BuildFrom(item); list.Add(test); num += test.TestCaseCount; } } log.Debug("Found {0} fixtures with {1} test cases", list.Count, num); return list; } private IList GetCandidateFixtureTypes(Assembly assembly, IList names) { IList types = assembly.GetTypes(); if (names == null || names.Count == 0) return types; List<Type> list = new List<Type>(); foreach (string name in names) { Type type = assembly.GetType(name); if (type != (Type)null) list.Add(type); else { string value = name + "."; foreach (Type item in types) { if (item.FullName.StartsWith(value)) list.Add(item); } } } return list; } private TestSuite BuildTestAssembly(Assembly assembly, string assemblyName, IList fixtures) { TestSuite testSuite = new TestAssembly(assembly, assemblyName); if (fixtures.Count == 0) { testSuite.RunState = RunState.NotRunnable; testSuite.Properties.Set("_SKIPREASON", "Has no TestFixtures"); } else { NamespaceTreeBuilder namespaceTreeBuilder = new NamespaceTreeBuilder(testSuite); namespaceTreeBuilder.Add(fixtures); testSuite = namespaceTreeBuilder.RootSuite; } testSuite.ApplyAttributesToTest(assembly); testSuite.Properties.Set("_PID", Process.GetCurrentProcess().Id); testSuite.Properties.Set("_APPDOMAIN", AppDomain.CurrentDomain.FriendlyName); testSuite.Sort(); return testSuite; } } }