使用spring-boot编写ParameterizedTest时,可以指定提供值的MethodSourceMethodSource是静态方法,这意味着无法访问自动装配的值和成员。

我确实在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

09-27 09:16