gpt4 book ai didi

unit-testing - Nunit 参数化 TestFixtures 并在运行时设置参数?

转载 作者:行者123 更新时间:2023-12-04 19:20:49 26 4
gpt4 key购买 nike

我对能够在运行时通过静态方法或返回 IEnumerable 的属性传递给它的构造函数参数实例化多个 testfixtures 感兴趣。

在 Nunit 2.5 中,他们引入了参数化测试和测试装置。这些允许您编写单个测试并使用 TestCase 属性提供的多个输入运行它,并编写单个测试类并分别使用不同的构造函数参数实例化它的多个实例。

除此之外,还可以使用 TestCaseSource 属性基于属性或方法的输出创建多个测试用例。这将使用实现 IEnumerable 的方法/属性的输出来创建一组测试用例,列表中的每个对象一个。这是我希望能够做到的,但在夹具级别而不是测试级别。

我的用例的一些背景:

我正在测试模拟软件,以及必须在运行任何模拟之前加载(从序列化对象)的“模拟环境”。大约有 5 种不同类型的 sim,所以我的测试类有 5 种测试方法(每种类型的 sim 一种)。我目前正在使用继承(而不是参数化装置)在几个(六个左右)模拟环境下运行测试用例,这些环境是从生产数据中获取的。

我的问题源于这样一个事实,即在最近尝试增加代码覆盖率时,我们自动生成了模拟组件的所有可能组合,从而产生了 100 多个模拟环境。我不想为其中的每一个创建继承的类,所以我使用 TestCaseSource 和一个属性,该属性返回文件夹中的所有工作区,并修改测试,以便它们(重新)加载测试本身内的 sim 环境每个测试用例。

理想情况下,我希望每个模拟环境有一个装置,并在运行时确定这些装置的数量/内容。我知道我可以通过将 sim 环境路径硬编码为 100 多个 TestFixture 属性来做前者,我可以做后者吗?

最佳答案

我通过电子邮件发送了 Nunit-Discuss list关于这一点,并从 Charlie Poole 得到以下回复.简而言之,这是不可能的,但正在研究 Nunit 的 future 版本。

Hi,

Simply stated, what you want is coming, but it's not here yet. Parameterized fixtures are (as you have discovered) limited by the fact that you can only use arguments that are permitted in attributes. We'd like to have a way that allows use of properties and methods as for test cases but fixtures are a bit more complicated, since the type may be generic.

Have you considered using a generic fixture as a workaround? You could pass in the environment as a Type (or Types) and any constructor arguments as non-type arguments. I don't know your app, so take this with a grain of salt, but how about something like...

[TestFixture(typeof(Environment1), 42, "string")]
public class TestClass<T>
{
IEnvironment env;

public TestClass(int n, string s)
{
env = new T( n, s);
}
...

}

Note that this is "maillistcode" so may not work. :-)

Charlie

关于unit-testing - Nunit 参数化 TestFixtures 并在运行时设置参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3605567/

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