gpt4 book ai didi

c# - 基类中的 NUnit TestCaseSource 带有来自派生类的数据

转载 作者:行者123 更新时间:2023-12-04 10:52:27 26 4
gpt4 key购买 nike

我想知道是否有办法使用 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 标记测试,并将我的测试逻辑插入到每个数组值的循环中。这并不理想,因为当测试失败时,很难确切地看到是哪个输入导致它失败,因为每个输入都没有被分离出来。

最佳答案

这应该让你开始,毫无疑问有一个更优雅的解决方案。

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}");
}
}
}

关于c# - 基类中的 NUnit TestCaseSource 带有来自派生类的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59416839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com