我尝试使用TestCaseSource属性。一个问题是:当sourceName字符串无效时,测试只会被忽略,而不是失败。如果源方法被重命名,sourceName字符串没有更新,然后您失去了测试提供的覆盖范围,那么这将是非常糟糕的。有没有一种方法可以改变NUnit的行为,以便在sourceName无效时测试失败?
发布于 2013-04-17 06:45:32
这个问题在NUnit 2.6.2中得到了解决。对于接受Type (必须实现IEnumerable)的属性,有了一个新的构造函数;它“推荐优先于其他形式使用,因为它不使用字符串来指定数据源,因此更容易重构”。(来自documentation。)
这确实要求您的测试运行器支持最新的NUnit。
一个非常基本的例子(参见上面的文档链接了解更多详细信息):
public class TestDataProvider : IEnumerable
{
public IEnumerator GetEnumerator()
{
return new List<int>{ 2, 4, 6 }.GetEnumerator();
}
}
[TestFixture]
public class MyTests
{
[TestCaseSource(typeof(TestDataProvider))]
public void TestOne(int number)
{
Assert.That(number % 2, Is.EqualTo(0));
}
}发布于 2013-04-10 06:21:55
我已经了解了它在NUnit内部是如何工作的。如果特定的源不存在,它们只会抛出异常:
MemberInfo[] members = providerType.GetMember(
providerName,
MemberTypes.Field | MemberTypes.Method | MemberTypes.Property,
BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if (members.Length == 0)
throw new Exception(string.Format(
"Unable to locate {0}.{1}", providerType.FullName, providerName));稍后,它们捕获它并将特定的ParameterSet (包装测试用例源代码的类)标记为RunState.NotRunnable,稍后将其作为忽略的测试进行处理。
因此,在不更改NUnit代码的情况下,可能无法改变这种行为。您还可以尝试与NUnit团队联系,或者以与失败测试相同的方式处理忽略的测试:)
发布于 2016-08-26 19:56:02
如何使用C#6中引入的nameof功能
public static class TestCasesData
{
public static string[] TestStringsData()
{
return new string[] {"TEST1", "TEST2"};
}
}
[TestFixture]
public class MyTest
{
[Test]
[TestCaseSource(typeof(TestCasesData), nameof(TestCasesData.TestStringsData))]
public void TestCase1(...)
{
}
}https://stackoverflow.com/questions/11722888
复制相似问题