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

TestFixtureSourceAttribute

TestCaseSourceAttribute indicates the source to be used to provide test fixture instances for a test class.
using NUnit.Framework.Interfaces; using NUnit.Framework.Internal; using NUnit.Framework.Internal.Builders; using System; using System.Collections; using System.Collections.Generic; using System.Reflection; namespace NUnit.Framework { [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)] public class TestFixtureSourceAttribute : NUnitAttribute, 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."; public string SourceName { get; set; } public Type SourceType { get; set; } public string Category { get; 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) { Type sourceType = SourceType ?? typeInfo.Type; foreach (TestFixtureParameters item in GetParametersFor(sourceType)) { yield return _builder.BuildFrom(typeInfo, item); } } 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) { string[] array2 = Category.Split(new char[1] { ',' }); foreach (string value in array2) { testFixtureData.Properties.Add("Category", value); } } list.Add(testFixtureData); } return list; } return list; } catch (Exception exception) { list.Clear(); list.Add(new TestFixtureParameters(exception)); return list; } } private IEnumerable GetTestFixtureSource(Type sourceType) { if (SourceName == null) return Reflect.Construct(sourceType) as IEnumerable; MemberInfo[] member = sourceType.GetMember(SourceName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy); if (member.Length == 1) { MemberInfo memberInfo = member[0]; FieldInfo fieldInfo = memberInfo as FieldInfo; if (fieldInfo != (FieldInfo)null) { if (!fieldInfo.IsStatic) return SourceMustBeStaticError(); return (IEnumerable)fieldInfo.GetValue(null); } PropertyInfo propertyInfo = memberInfo as PropertyInfo; if (propertyInfo != (PropertyInfo)null) { if (!propertyInfo.GetGetMethod(true).IsStatic) return SourceMustBeStaticError(); return (IEnumerable)propertyInfo.GetValue(null, null); } MethodInfo methodInfo = memberInfo as MethodInfo; if (methodInfo != (MethodInfo)null) { if (!methodInfo.IsStatic) return SourceMustBeStaticError(); return (IEnumerable)methodInfo.Invoke(null, null); } } 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 }; } } }