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

TestFixtureSourceAttribute

Identifies the source used to provide test fixture instances for a test class.
using NUnit.Framework.Interfaces; using NUnit.Framework.Internal; using NUnit.Framework.Internal.Builders; using NUnit.Framework.Internal.Extensions; using System; using System.Collections; using System.Collections.Generic; using System.Reflection; using System.Runtime.CompilerServices; namespace NUnit.Framework { [NullableContext(1)] [Nullable(0)] [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)] public class TestFixtureSourceAttribute : NUnitAttribute, IFixtureBuilder2, IFixtureBuilder { private readonly NUnitTestFixtureBuilder _builder = new NUnitTestFixtureBuilder(); public const string MUST_BE_STATIC = "The sourceName specified on a TestCaseSourceAttribute must refer to a static field, property or method."; [Nullable(2)] [field: Nullable(2)] public string SourceName { [NullableContext(2)] get; } [Nullable(2)] [field: Nullable(2)] public Type SourceType { [NullableContext(2)] get; } [Nullable(2)] [field: Nullable(2)] public string Category { [NullableContext(2)] get; [NullableContext(2)] set; } public TestFixtureSourceAttribute(string sourceName) { SourceName = sourceName; } public TestFixtureSourceAttribute(Type sourceType, string sourceName) { SourceType = sourceType; SourceName = sourceName; } public TestFixtureSourceAttribute(Type sourceType) { SourceType = sourceType; } public IEnumerable<TestSuite> BuildFrom(ITypeInfo typeInfo) { return BuildFrom(typeInfo, PreFilter.Empty); } public IEnumerable<TestSuite> BuildFrom(ITypeInfo typeInfo, IPreFilter filter) { Type sourceType = SourceType ?? typeInfo.Type; ParameterizedFixtureSuite parameterizedFixtureSuite = new ParameterizedFixtureSuite(typeInfo); parameterizedFixtureSuite.ApplyAttributesToTest(typeInfo.Type); FixtureLifeCycleAttribute[] attributes = typeInfo.Type.Assembly.GetAttributes<FixtureLifeCycleAttribute>(); FixtureLifeCycleAttribute[] attributes2 = typeInfo.Type.GetAttributes<FixtureLifeCycleAttribute>(true); ParallelizableAttribute[] attributes3 = typeInfo.Type.GetAttributes<ParallelizableAttribute>(true); foreach (ITestFixtureData item in GetParametersFor(sourceType)) { TestSuite testSuite = _builder.BuildFrom(typeInfo, filter, item); testSuite.ApplyAttributesToTest(attributes); testSuite.ApplyAttributesToTest(attributes2); testSuite.ApplyAttributesToTest(attributes3); parameterizedFixtureSuite.Add(testSuite); } yield return (TestSuite)parameterizedFixtureSuite; } public IEnumerable<ITestFixtureData> GetParametersFor(Type sourceType) { List<ITestFixtureData> list = new List<ITestFixtureData>(); try { IEnumerable testFixtureSource = GetTestFixtureSource(sourceType); if (testFixtureSource != null) { foreach (object item in testFixtureSource) { ITestFixtureData testFixtureData = item as ITestFixtureData; if (testFixtureData == null) { object[] array = item as object[]; if (array == null) array = new object[1] { item }; testFixtureData = new TestFixtureParameters(array); } if (Category != null) { foreach (string item2 in Category.Tokenize(',', false)) { testFixtureData.Properties.Add("Category", item2); } } list.Add(testFixtureData); } return list; } return list; } catch (Exception exception) { list.Clear(); list.Add(new TestFixtureParameters(exception)); return list; } } [return: Nullable(2)] private IEnumerable GetTestFixtureSource(Type sourceType) { if (SourceName == null) return Reflect.Construct(sourceType) as IEnumerable; MemberInfo[] memberIncludingFromBase = sourceType.GetMemberIncludingFromBase(SourceName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); if (memberIncludingFromBase.Length == 1) { MemberInfo memberInfo = memberIncludingFromBase[0]; FieldInfo fieldInfo = memberInfo as FieldInfo; if ((object)fieldInfo != null) { if (!fieldInfo.IsStatic) return SourceMustBeStaticError(); return (IEnumerable)fieldInfo.GetValue(null); } PropertyInfo propertyInfo = memberInfo as PropertyInfo; if ((object)propertyInfo != null) { if ((!(propertyInfo.GetGetMethod(true)?.IsStatic)) ?? true) return SourceMustBeStaticError(); return (IEnumerable)propertyInfo.GetValue(null, null); } MethodInfo methodInfo = memberInfo as MethodInfo; if ((object)methodInfo != null) { if (!methodInfo.IsStatic) return SourceMustBeStaticError(); return AsyncEnumerableAdapter.CoalesceToEnumerable(methodInfo.InvokeMaybeAwait<object>()); } } return null; } private static IEnumerable SourceMustBeStaticError() { TestFixtureParameters testFixtureParameters = new TestFixtureParameters(); testFixtureParameters.RunState = RunState.NotRunnable; testFixtureParameters.Properties.Set("_SKIPREASON", "The sourceName specified on a TestCaseSourceAttribute must refer to a static field, property or method."); return new TestFixtureParameters[1] { testFixtureParameters }; } } }