I have multiple test classes that implement an empty interface (ITest
, expanded with IEnumerable
).
Interface:
public interface ITest : IEnumerable
{
}
TestDataSource with a description:
[Description("TestSourceName")]
public class MyTests : ITest
{
public IEnumerator GetEnumerator()
{
yield return "123";
yield return "456";
}
}
TestDataProvider
class that will be used as TestDataSource
in NUnit,
I'm using reflection to get the right TestDataSource
object:
public class TestDataProvider : IEnumerable
{
public string Name { get; set; }
public IEnumerator GetEnumerator()
{
if (string.IsNullOrEmpty(Name))
yield break;
var testdata = System.Reflection.Assembly.GetExecutingAssembly()
.GetTypes()
.Where(mytype => mytype.GetInterfaces().Contains(typeof(ITest)))
.Where(mytype => ((DescriptionAttribute)mytype.GetCustomAttributes(typeof(DescriptionAttribute), false)[0])
.Description.ToLower() == Name.ToLower());
yield return ((IEnumerable)testdata).GetEnumerator();
}
public IEnumerator GetEnumerator(string name)
{
Name = name;
return GetEnumerator();
}
}
Now I wonder how I can pass TestSourceName
to the TestDataSource
for NUnit?
[TestCaseSource(typeof(TestDataProvider)), TestCaseSourceAttribute("TestSourceName")]
public void TestTestDataProvider()
{
// here we will have the TestDataSource object given by TestDataProvider
// using parameter/attribute? "TestSourceName"
}