正在运行集成测试,我将它们的参数存储为diffrent文件内的json。这些文件存储了不同的测试用例,然后用不同的方法对其进行测试。
我想知道是否可以创建这样的通用读取文件方法:
static Stream<Arguments> argumentsOf(String fileName) {
Path argumentsFilePath = Paths.get(ARGUMENTS_FILES_DIRECTORY + fileName);
//read and return arguments stored in a file
}
连同这样的功能接口:
static Supplier<Stream<Arguments>> anExampleArgument =
() -> argumentsOf("some_test_case_argument.json");
所以我可以做这样的事情:
@ParameterizedTest
@MethodSource("anExampleArgument.get")
void test1(String exampleArgument) {
//...
}
我找不到有关这种情况的任何信息。上面看到的示例代码导致
org.junit.platform.commons.JUnitException: Could not find factory method [anExampleArgument.get] in class [com.company.ExampleIntegrationTest]
不,目前您所描述的似乎不可行。
MethodSource的文档对此并不十分清楚,但是查看its JavaDoc可能会提供一些见解:
外部类中的工厂方法必须由标准方法名称引用,例如
com.example.StringsProviders#blankStrings
。
引发您所看到异常的代码是here:
private Method getMethod(Class<?> clazz, String methodName) {
return ReflectionUtils.findMethod(clazz, methodName).orElseThrow(() -> new JUnitException(
format("Could not find factory method [%s] in class [%s]", methodName, clazz.getName())));
}
可悲的是,他们的ReflectionUtils类似乎不包含任何用于评估方法后的其他调用的功能,因此它将String视为标准方法名称。
正如一个评论者所指出的,也许Dynamic Tests可能可以替代?