Java JUnit5,如何从每次回调之前获取参数化测试参数?
我在不同的类中有以下一组方法:Java JUnit5,如何从每次回调之前获取参数化测试参数?,java,junit,junit5,Java,Junit,Junit5,我在不同的类中有以下一组方法: @ParameterizedTest @MethodSource("com.myapp.AppleProvider#getApplesDependingOnConditions") public void testSomething(Apple apple) { SomeContainer.getInstance().setApple(apple) // ... } 问题是我无法避免复制/复制以下内容 name每个测试调用的参数 每个测试的第一行-
@ParameterizedTest
@MethodSource("com.myapp.AppleProvider#getApplesDependingOnConditions")
public void testSomething(Apple apple) {
SomeContainer.getInstance().setApple(apple)
// ...
}
问题是我无法避免复制/复制以下内容
每个测试调用的参数name
- 每个测试的第一行-
SomeContainer.getInstance().setApple(apple)
和在每个Callback
之前使用扩展点,但它们似乎无法获取调用它们的参数
根据,现在还不可能从扩展点访问传递给测试的参数,而且参数化测试不适用于每次
回调之前的
因此,我基本上在寻找任何解决方法,以便我的测试看起来像:
@MyAwesomeTest
public void testSomething() {
// ...
}
其中@MyAwesomeTest
封装了上面的两个注释
我已经发现:
- 在扩展点中,以下数据可用:
displayname
,方法
或标记
。如果我将参数传递给每个测试方法(尽管这是非常不可取的),看起来我可以依赖displayname
,因为它将反映传递给特定参数的方法调用的参数。
我试图找出是否还有其他方法不需要在每个方法中添加参数
我认为你可以通过作弊来获得大部分的成功:
publicstaticstreamapples(){
返回com.myapp.AppleProvider
.GetAppleSdependingConditions()
.stream()
.peek(苹果->SomeContainer.getInstance().setApple(苹果))
.map(apple->{/*转换为名称字符串*/})
}
@参数化测试
@方法来源(“苹果”)
public void testSomething(字符串名称){
// ...
}
Hi,我的目标是在每次使用一个参数(当前参数)调用测试方法之前调用setApple
,但是这里看起来每个测试执行apple()都将被调用,而setApple
将被调用两次为什么您认为setApple
将被调用两次?流是惰性计算的,因此peek
中对setApple
的每次调用都应该在执行测试方法之前发生,除非JUnit在执行测试方法之前将流的整个输出收集到一个集合中。