【发布时间】:2021-06-10 04:15:44
【问题描述】:
我有一个函数,它接收两个对象并返回“最大”的一个。对于这个问题,“最大”的确定并不重要。我有一个参数化测试,如下所示:
@ParameterizedTest()
@MethodSource
void testGetLargest(Widget widget1, Widget widget2, Widget expectedLargestWidget) {
var largestWidget = service.getLargestWidget(widget1, widget2);
assertEquals(expectedLargestWidget, largestWidget);
}
private static Stream<Arguments> testGetLargest() {
return Stream.of(
Arguments.of(
Widget.builder().field1("something").field2("something else").build(),
Widget.builder().field1("second something").field2("second something else").build(),
**not sure what to put here**),
...
如您所见,测试的第三个参数应该与前两个参数之一相同。虽然我可以复制代码并创建与前两个相同的第三个参数,但这感觉很混乱。
有没有一种方法可以构建参数,使我可以将与前两个中的一个相同的对象作为第三个参数传递?
或者在我的测试中,我可以引用现有参数之一作为第三个参数? 我考虑过让第三个参数是一个 int,它代表前两个参数之一的索引,然后使用反射,但这也感觉很重。
【问题讨论】:
-
把你的测试改成一个数组,然后把索引传给最大的小部件?
-
传递一个整数作为第三个参数很好,但是在尝试实际断言第一个对象是更大还是第二个时,它会给你带来很多痛苦(因为你必须将对象与整数进行比较),如一般的做法是在断言期间传递整个对象并检查其是否相等。