![](/img/trans.png)
[英]InlineAutoDataAttribute but for NUnit (for TestCase and TestCaseSource)
[英]NUnit TestCaseSource
我正在使用TestCaseSource屬性。 一個問題:當sourceName字符串無效時,測試只會被忽略而不是失敗。 如果重命名源方法,sourceName字符串沒有更新,那么這將非常糟糕,然后您將失去測試提供的覆蓋范圍。 有沒有辦法改變NUnit的行為,如果sourceName無效,測試失敗?
這在NUnit 2.6.2中得到了解決。 該屬性有一個新的構造函數,它接受一個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));
}
}
我看看它在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代碼的情況下,可能無法更改此行為 - 這是可以下載的btw。 您也可以嘗試與NUnit團隊聯系,或者只是以與失敗測試相同的方式處理被忽略的測試:)
如何使用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(...)
{
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.