簡體   English   中英

NUnit 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM