【发布时间】:2019-08-13 08:47:14
【问题描述】:
在使用 XUnit 创建 Theory 测试用例时,我希望能够同时包含每个用例的参数和预期结果。我使用了 InlineData 属性,但是对于繁重的配置加载,这不是最佳的,并且不允许重用。
[InlineData(1,2,3,4,5,6,7,...)]
因此,我已将测试配置移到单独的类中,现在使用 MemberData 和 MemberType 加载它们。
[Theory]
[MemberData(nameof(DataClass.Data), MemberType = typeof(DataClass))]
public void TestValidConfig(Configuration config)
{
...
}
但是,这不允许我像使用基本标签时那样指定预期结果,即
[InlineData("Input1", "Input2", "Input3", "ExpectedResult")]
我不想在配置数据中包含预期结果,因为这将在多个测试中重复使用。
有没有人解决这个挑战?
因此,潜在的挑战是拥有复杂的测试数据,可以在多个地方使用,但又想要分离预期的结果。因此,在计算器(不好的例子)中,您可以拥有作为测试数据的数字列表。然后可以将这些传递到加法或乘法或减法测试中。这是我想要分离输入和预期输出数据的地方。
【问题讨论】:
-
不打算积极关闭 ;) 话虽如此,我认为您的难题有答案 - 如果您的问题不同,请告诉我,我很乐意重新打开
-
嗨鲁本,不完全是。我已经在使用复杂类型,我想做的是在测试之间重用测试数据,而不是重复。尽管这需要不同的断言和预期的结果。所以问题更多是关于将复杂的配置数据与简单的预期结果混合在一起。我更新了问题的最后一段以反映这一点。
-
半相关:stackoverflow.com/questions/22093843/…(按上述重新打开)
-
一般来说,我会创建一个产生对象[]的成员数据,但在内部将其分解为输入+结果的生成器,即
for (inputs,out) in expecteds -> yield appendarray( inputs, output) -
你为什么不直接创建一个单独的方法,比如
DataClass.Test1,它在内部从帮助类调用Data方法,并将它与特定测试的预期结果结合起来?这样您就可以重用您的Data,同时更改每次测试的预期结果。或者我只是没明白你的意思。