当前位置: 首页 > 知识库问答 >
问题:

@value在Spring Boot测试中“无法解析占位符”

夹谷浩博
2023-03-14
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {ApplicationTest.class})
public class TestOnSpring {
    @Value("${app.name}")
    private String appName;

    @Test
    public void testValue(){
        System.out.println(appName);
    }
}

和ApplicationTest.java

@ComponentScan("org.nerve.jiepu")
@EnableAutoConfiguration()
public class ApplicationTest {

    public static void main(String[] args) {
        SpringApplication.run(ApplicationTest.class, args);
    }
}

我的POM是这样的:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.0.BUILD-SNAPSHOT</version>
    </parent>

当我运行测试时,我得到以下错误信息

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'app.name' in string value "${app.name}"
    at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)
    at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
    at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:204)
    at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:178)
    at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:172)
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:807)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1027)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:543)
    ... 31 more

但当我将此应用程序作为普通Java应用程序运行时

@SpringBootApplication
public class Application {

    public static void main(String[] args){
        SpringApplication.run(Application.class, args);
    }
}

它工作得很好!

怎么了?我应该如何用Spring-Boot参加junit测试?多谢!

共有1个答案

葛威
2023-03-14

您需要添加

@PropertySource(“classpath:application.properties”)

这样它就会选择您的普通配置。

@TestPropertySource(locations=“classpath:test.properties”)

如果不只是复制粘贴您的配置文件到test/resources文件夹,那么引导将从那里选择。

看看这个。

 类似资料:
  • 问题内容: 我要对Spring-boot进行Junit测试,如下所示: 和ApplicationTest.java这样 和我的POM像这样: 运行测试时,出现以下错误信息 但是当我将此应用程序作为普通Java应用程序运行时 运行良好! 它出什么问题了 ?我应该如何通过Spring-boot进行junit测试?非常感谢! 问题答案: 您需要添加 @PropertySource(“ classpath

  • 我想对Spring Boot进行JUnit测试,如下所示: 应用程序est.java这样 我的POM是这样的: 当我运行测试时,我得到了以下错误信息 但是当我以普通Java应用程序的形式运行这个应用程序时 它工作得很好! 它怎么了?我应该如何使用Spring Boot进行jUnit测试?非常感谢!

  • 问题内容: 我对春天还很陌生,所以请问这是一个愚蠢的问题。当我尝试启动程序时,出现以下错误:。执行以下代码时,将引发错误: 资源文件夹中存在一个名为的属性文件,其中包含主机和端口的信息。我不确定在哪里定义(如果有的话)。也许甚至没有定义,这就是问题所在。我需要将其更改为类似的东西还是缺少其他内容? 问题答案: 您没有正确读取属性文件。propertySource应该将参数传递为:或。将注释更改为:

  • 我有个例外 我也尝试过使用JarLoader和PropertiesLauncher,但运气并不好。 我确实在application.properties中定义了属性sysm.client.api.path,但为了更好地衡量,我还将它作为-d参数-dsysm.client.api.path=my-path添加到命令行中。 注意:IntelliJ没有将其作为a-jar运行;相反,它在一个大型类路径命令

  • 问题内容: 我有我的配置: 我得到错误 我知道这可能缺少属性文件,但是我在类路径中恰好有它。有什么不见了? 我的web.xml: 问题答案: 你的应用程序中可能有多个。尝试在超类的方法上设置一个断点,看看在应用程序启动时是否多次调用了该断点。如果不止一个,则可能需要查看配置属性,以便你的应用程序可以正常启动。

  • 问题内容: 我正在尝试使用文件中的属性,但它似乎不起作用。 这是我的代码: 此类使用批注获取属性。它也被声明为Spring Service并链接到我的文件: 使用,我将此文件链接到我的文件: 这确实有意义,对吗? 但是,当我尝试启动项目时,Tomcat抛出此异常: 或者,简而言之: 编辑: 这是我的web.xml: 我的infraContext.xml被导入到另一个名为applicationCon