java - 在 Spring 测试中加载文件

标签 java spring spring-boot properties spring-test

我的项目中的文件夹结构是:

./assets/strings.properties
./module1/src/main/java/{some-packages}/ContextConfig.java
./module1/src/test/java/{some-packages}/TestContextConfig.java
./module1/pom.xml
./module2/pom.xml
./pom.xml

在 ContextConfig 中,我从 Assets 文件夹中加载一些属性文件,如下所示:

@PropertySources({
        @PropertySource("file:assets/strings.properties")
})
public class ContextConfig {
/*some code...*/
}

请注意,我没有使用 classpath: 而是使用 file:

在 TestContextConfig 中,我导入 ContextConfig 并且还激活嵌入式 mongo,如下所示:

@Configuration
@Import({
        ContextConfig.class,
        MongoAutoConfiguration.class
})
public class TestContextConfig {
}

当我尝试在我的测试类中使用它时:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestContextConfig.class)
public class ProofOfConcept {
/*some code...*/
}

我收到 FileNotFoundException 因为它找不到属性文件,但是当应用程序正常启动(不在测试中)时,一切正常。 我得到的异常:

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [{some-packages}.config.TestContextConfig]; nested exception is java.io.FileNotFoundException: assets\strings.properties (System nie może odnaleźć określonej ścieżki)
    at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:495)
    at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:276)

如何在测试中从 Assets 文件夹加载文件?

最佳答案

属性文件 -

./assets/strings.properties  

似乎超出了您的测试上下文。您将需要使用为您的应用程序加载外部属性文件的技术。

请查看Spring application context external properties? 。这应该可以解决你的问题。您可以提供属性文件位置作为 VM 争论,也可以在测试中进行硬编码。使用 VM 参数提供此属性是首选方法。

关于java - 在 Spring 测试中加载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41752729/

相关文章:

java - 如何在 JSP 页面中显示 Pretty Print JSON 字符串

java - 将2个long转换为对应的byte[],并在中间加上分隔符

java - 如何在代码中使用新的 Bolt 更新现有的 Storm 拓扑?

java - org.apache.jasper.JasperException 代码错误

MongoDB 测试容器在 github 操作中失败

java - 如何在 application.yml 中设置与 postgresql 连接的初始大小

带有 SQL Server 2012 的 Java Hibernate 不工作?

java - Mongodb在插入文档后返回id

java - Spring Boot中如何划分开发环境和生产环境的Liquibase包结构?

java - 在到达 Controller 之前和离开 Controller 之后解密/加密有效负载