Java 有没有办法知道@MethodSource内部为哪个测试方法提供数据?

Java 有没有办法知道@MethodSource内部为哪个测试方法提供数据?,java,unit-testing,junit,junit5,Java,Unit Testing,Junit,Junit5,在我的TestClass中,我有很多不同的测试方法,它们都必须使用相同的数据运行,因此具有相同的@MethodSource: 对于testMethodN,数据必须与其他方法略有不同。我的想法是检测testDataProvider内部当前为哪个方法生成数据,并相应地调整输出。 有没有办法做到这一点? 如果不是,那么什么是实现我需要的最干净的方法,再次强调testMethodN的testDataProvider的输出与其他测试方法的输出非常相似?可以使用新的@MethodSource解决这个问题:

在我的TestClass中,我有很多不同的测试方法,它们都必须使用相同的数据运行,因此具有相同的@MethodSource:

对于testMethodN,数据必须与其他方法略有不同。我的想法是检测testDataProvider内部当前为哪个方法生成数据,并相应地调整输出。 有没有办法做到这一点?
如果不是,那么什么是实现我需要的最干净的方法,再次强调testMethodN的testDataProvider的输出与其他测试方法的输出非常相似?

可以使用新的@MethodSource解决这个问题:


当然,testMethodN的@MethodSourcefilteredTestDataProvider也应该相应地进行调整。

这绝对是正确的选择。MethodSource只是一个数据提供者;这不像您的数据库检查谁在请求并相应地修改它提供的数据。
 public class TestClass {
    private class TestData { /* some fields */ }
    private List<TestData> testDataTemplates = asList( 
        new TestData(...),
        /* some more elements */ 
    );

    static private Stream<Arguments> testDataProvider {
        List<TestData> testData = new ArrayList<>();
        // Here we do some nested .forEach iterating over the testDataTemplates
        return testData.stream();
    }

    @ParametrizedTest
    @MethodSource("testDataProvider")
    public void testMethod1(...) { }

    // some more test methods

    @ParametrizedTest
    @MethodSource("testDataProvider")
    public void testMethodN(...) { }

}
static private Stream<Arguments> filteredTestDataProvider() {
    List<Arguments> testCases = new ArrayList<>();

     testDataProvider().forEach(args -> {
          // decide whether and how the current args are used
     });

     return testCases.stream();
}