Dan*_*anB 22 c# nunit testcasesource
我正在使用TestCaseSource属性.一个问题:当sourceName字符串无效时,测试只会被忽略而不是失败.如果重命名源方法,sourceName字符串没有更新,那么这将非常糟糕,然后您将失去测试提供的覆盖范围.有没有办法改变NUnit的行为,如果sourceName无效,测试失败?
这在NUnit 2.6.2中得到了解决.有一个属性的新构造函数,它采用a Type(必须实现IEnumerable); 它"建议优先使用其他表单,因为它不使用字符串来指定数据源,因此更容易重构." (来自文档.)
这确实需要您的测试运行器支持最新的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));
}
}
Run Code Online (Sandbox Code Playgroud)
小智 3
我研究了它在 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));
Run Code Online (Sandbox Code Playgroud)
后来他们捕获它并标记特定的ParameterSet(包装测试用例源的类),RunState.NotRunnable稍后将其作为忽略的测试进行处理。
因此,在不更改 NUnit 代码的情况下可能无法更改此行为 - 顺便说一句,该代码可供下载。您还可以尝试与 NUnit 团队联系,或者以与失败测试相同的方式对待忽略的测试:)
| 归档时间: |
|
| 查看次数: |
7386 次 |
| 最近记录: |