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