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)
我尝试在TestExecutionCallback之前使用扩展点-
在每个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在执行测试方法之前将流的整个输出收集到一个集合中。