使用spring-boot编写ParameterizedTest
时,可以指定提供值的MethodSource
。 MethodSource
是静态方法,这意味着无法访问自动装配的值和成员。
我确实在application.properties
中定义了一个值,这对于设置参数至关重要(它指向包含我需要的数据的目录)。如何在静态方法中访问值?
示例代码:
application.properties:
com.example.directorypath=a/b/c
ApplicationTest:
@ActiveProfiles("dev")
@RunWith(SpringRunner.class)
@SpringBootTest
public class RdxApplicationTests {
@Value("${com.example.directorypath}")
private String directory;
@ParameterizedTest
@MethodSource("provideDirectories")
public void test(File dir){
System.out.println(dir);
}
private static Stream<Arguments> provideDirectories(){
//here is the place I need the value
File f = new File(directory);
return Arrays.stream(Objects.requireNonNull(f.listFiles())).map(Arguments::of);
}
}
最佳答案
解决静态工厂方法问题的方法如下:
用@TestInstance(TestInstance.Lifecycle.PER_CLASS)
注释测试类,这允许测试类中的工厂方法不是静态的。
注释是一个JUnit5注释。
资料来源:MethodSource