[英]NUnit TestCaseSource in base class with data from derived class
我想知道是否有一種方法可以在基測試類中使用TestCaseSource
並以通用方式從派生類中提供數據。
例如,如果我有以下基類:
public abstract class Base<T>
{
protected static T[] Values;
[TestCaseSource(nameof(Values))]
public void MyTest(T[] values)
{
// Some test here with the values;
}
}
以及以下派生類
[TestFixture]
public class Derived : Base<string>
{
[OneTimeSetup]
public void OneTimeSetup()
{
Values = new[] { "One", "Two" };
}
[TestCaseSource(nameof(Values))
public void DerivedSpecificTest(T[] values)
{
// Some test here with the values;
}
}
我認為我所做的不正確,因為當我運行派生類測試時,我在兩個測試中都會遇到此異常: Failed: System.Exception: The test case source could not be found.
但是,該示例應該了解我正在嘗試做的事情(如果我想要做的事情是可能的)。 基本上我想知道是否可以在基類中使用TestCaseSource
和派生類提供的數據。
任何幫助表示贊賞,如果需要澄清,我可以回答問題。
我還應該提到,如果我將Values
初始化為一個空的、長度為零的數組,則測試返回的結果是不確定的。 我認為這是因為在創建測試時數據發生了變化(NUnit 的某些行為?)。
如果我不使用TestCaseSource
,我可以讓測試運行,而只是使用屬性Test
標記Test
,並將我的測試邏輯插入到每個數組值的循環中。 這並不理想,因為當測試失敗時,很難確切地看到是哪個輸入導致它失敗,因為每個輸入都沒有被分離出來。
這應該讓你開始,毫無疑問有一個更優雅的解決方案。
using System;
using NUnit.Framework;
namespace UnitTestProject1
{
public class Base<T>
{
private static T[] Values;
[TestCaseSource(nameof(Values))]
public void MyTest(T value)
{
Console.WriteLine($"Base: {value}");
// Some test here with the values;
}
}
[TestFixture]
public class Derived : Base<string>
{
private static string[] Values= new[] { "One", "Two" };
[TestCaseSource(nameof(Values))]
public void DerivedSpecificTest(string value)
{
// Some test here with the values;
Console.WriteLine($"Derived: {value}");
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.