Java 如何在单元测试中将src/test数据中的属性文件发送到src/main应用程序

Java 如何在单元测试中将src/test数据中的属性文件发送到src/main应用程序,java,spring-boot,junit5,Java,Spring Boot,Junit5,嗨,我是Java和Spring boot的新手 我有一个小项目,其中在src/main/java/MainApp.java 属性是src/main/resources/application.properties 当我阅读MainApp.java中的src/main/resources/application.properties时,它工作正常 类似地,我有src/test/java/MainAppTest.java和src/test/resources/application.properti

嗨,我是Java和Spring boot的新手

我有一个小项目,其中在
src/main/java/MainApp.java
属性是
src/main/resources/application.properties

当我阅读
MainApp.java
中的
src/main/resources/application.properties
时,它工作正常

类似地,我有
src/test/java/MainAppTest.java
src/test/resources/application.properties

当我阅读
MainAppTest.java
中的
src/test/resources/application.properties
时,它工作得很好

问题:我想测试
MainApp.java
中的一个方法,该方法使用属性在特定目录中创建文件。当我从
MainAppTest.java
调用该方法时,可以从
src/test/resources
读取属性,但当程序执行转到
mainappt.java
时,它显示属性为
null

如何将读取的属性从
src/test/resources
传输到
src/main/java/MainApp.java

代码:

MainApp.java

@SpringBootApplication
@EnableJms
@EnableScheduling
public class EquensfilemqApplication {

@Value("${dir.location}")
private String directoryLocation;

protected void processMessage(String message)
    {
        String fileName = "first.txt";
        FileWriter writer = new FileWriter (directoryLocation + fileName);
        
        // shows null when test is executed
        System.out.println("dir in main: " + directoryLocation);
        
        writer.write (message);
        writer.close();
    }
}
MainAppTest.java

class EquensfilemqApplicationTests {
    @Value("${dir.location}")
    private String directoryLocation;
    
    @Test
    void processMessageTest() {
        String testMessage = "test content...";
        
        // prints correct value when test is executed
        System.out.println("dir in test: " + directoryLocation);

        MainApp app = new MainApp();
        app.processMessage(testMessage);
        
    }
}

我不知道有什么方法可以实现这一点。

我使用JUnit中的ReflectionUtils找到了这个问题的答案

ReflectionTestUtils.setField(objectOfMainApplication, "variableNameInMainApplication", variableNameInTestClass);

MainAppTest.java
代码示例是否完整?我看不到您正在使用
@RunWith
/
@ExtendWith
。如果您正在使用构造函数创建
MainApp
,您如何希望将任何属性注入实例?您正在尝试在Spring初始化之前使用
@Value
。Spring需要初始化自身,并将所有自动连线bean添加到其容器中(包括您的主类)。
@Value
注释与
@Autowired
注释类似,它们都要求类本身是一个Bean。@HernánAlarcón我看到@extendedwith(SpringExtension.class)无法解析为类型,因此我将其从测试中删除class@Mugiwara您建议应该做些什么来允许spring使用主类的bean初始化自己。