基础 class 中的 NUnit TestCaseSource 以及派生 class 中的数据
NUnit TestCaseSource in base class with data from derived class
我想知道是否有一种方法可以在基础测试 class 中使用 TestCaseSource
以及派生 class 以通用方式给出的数据。
例如,如果我有以下基数 class:
public abstract class Base<T>
{
protected static T[] Values;
[TestCaseSource(nameof(Values))]
public void MyTest(T[] values)
{
// Some test here with the values;
}
}
和下面的派生class
[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;
}
}
我认为我所做的是不正确的,因为,当我 运行 派生的 class 测试时,我在两个测试中都得到了这个异常:Failed: System.Exception: The test case source could not be found.
但是,该示例应该涵盖我正在尝试做的事情(如果我正在尝试做的事情是可能的)。本质上我想知道是否可以在基础 class 中使用 TestCaseSource
和派生 class.
给出的数据
感谢任何帮助,如果需要澄清,我可以回答问题。
我还应该提到,如果我将 Values
初始化为一个空的零长度数组,则测试 return 是不确定的。我认为这是因为在创建测试时数据发生了变化(NUnit 的某些行为?)。
如果我不使用 TestCaseSource
,我可以得到 运行 的测试,而只是用属性 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}");
}
}
}
我想知道是否有一种方法可以在基础测试 class 中使用 TestCaseSource
以及派生 class 以通用方式给出的数据。
例如,如果我有以下基数 class:
public abstract class Base<T>
{
protected static T[] Values;
[TestCaseSource(nameof(Values))]
public void MyTest(T[] values)
{
// Some test here with the values;
}
}
和下面的派生class
[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;
}
}
我认为我所做的是不正确的,因为,当我 运行 派生的 class 测试时,我在两个测试中都得到了这个异常:Failed: System.Exception: The test case source could not be found.
但是,该示例应该涵盖我正在尝试做的事情(如果我正在尝试做的事情是可能的)。本质上我想知道是否可以在基础 class 中使用 TestCaseSource
和派生 class.
感谢任何帮助,如果需要澄清,我可以回答问题。
我还应该提到,如果我将 Values
初始化为一个空的零长度数组,则测试 return 是不确定的。我认为这是因为在创建测试时数据发生了变化(NUnit 的某些行为?)。
如果我不使用 TestCaseSource
,我可以得到 运行 的测试,而只是用属性 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}");
}
}
}