如何覆盖Spring中@Value注入的字段值?

Ste*_*ers 6 java junit spring integration-testing dependency-injection

我有一个使用从属性注入的字段的类@Value

public class MyClass {
    @Value(${property.key})
    private String filePath;
    ...
Run Code Online (Sandbox Code Playgroud)

我的集成测试需要更改filePath为指向一些不同的文件。

我尝试在调用方法之前使用反射来设置它:

public class MyClassIT {
    @Autowired MyClass myClass;

    @Test
    public void testMyClassWithTestFile1 {
        ReflectionTestUtils.setField(myClass, "filePath", "/tests/testfile1.csv");
        myClass.invokeMethod1();
        ...
Run Code Online (Sandbox Code Playgroud)

但是当第一个方法被调用时,@Value注入开始并改变刚刚设置的值。谁能建议如何解决这个问题或替代方法?

注意:我需要 Spring 来管理类(因此注入了其他依赖项),并且使用不同测试文件的同一类需要其他测试。

chr*_*ke- 5

只需使用一个setter。无论如何,通常最好使用 setter 注入而不是字段注入。更好的是,完全转换为构造函数和 setter 注入,您通常可以用模拟替换 Spring 测试上下文。