我有多个实现空接口的测试类(ITest,用IEnumerable扩展)。
接口:
public interface ITest : IEnumerable
{
}具有描述的TestDataSource:
[Description("TestSourceName")]
public class MyTests : ITest
{
public IEnumerator GetEnumerator()
{
yield return "123";
yield return "456";
}
}TestDataProvider类,它将在NUnit中用作TestDataSource,我使用反射来获得正确的TestDataSource对象:
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();
}
}现在,我想知道如何将TestSourceName传递给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"
}发布于 2015-05-19 20:56:21
您可以采取的一种方法是使用NUnit TheoryAttribute。理论仍然是即将发布的3.0版本的一部分。
这是一个基于工作理论的测试示例,它使用来自DataPointsAttribute的数据作为测试方法的参数。
[Description("TestSource2")]
public class TestData1 : ITest
{
public IEnumerator GetEnumerator()
{
yield return "123";
yield return "456";
}
}
[Description("TestSource1")]
public class TestData2 : ITest
{
public IEnumerator GetEnumerator()
{
yield return 33;
yield return 44;
}
}
public class TestDataProviderFixture
{
[Datapoints]
public string[] SourceNames = {"TestSource1", "TestSource2"};
[Theory]
public void TestTestDataProvider(string sourceName)
{
var provider = new TestDataProvider();
var data = provider.GetEnumerator(sourceName);
if (sourceName == "TestSource1")
{
while (data.MoveNext())
{
//Do Stuff
}
}
else if (sourceName == "TestSource2")
{
while (data.MoveNext())
{
//Do Stuff
}
}
else
{
Assert.Fail();
}
}
}https://stackoverflow.com/questions/28307183
复制相似问题