Java 如何在单元测试中将src/test数据中的属性文件发送到src/main应用程序
嗨,我是Java和Spring boot的新手 我有一个小项目,其中在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
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初始化自己。