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

重写Junit测试中默认的spring启动应用程序.属性设置

柳宾实
2023-03-14

我有一个spring引导应用程序,其中默认属性设置在类路径(src/main/resources/application.properties)中的application.properties文件中。

我想用test.properties文件(src/test/resources/test.properties)中声明的属性重写JUnit测试中的一些默认设置

我通常有一个专用的配置类用于我的Junit测试,例如。

package foo.bar.test;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@Import(CoreConfig.class)
@EnableAutoConfiguration
public class TestConfig {

}

我首先认为在TestConfig类中使用@PropertySource(“classpath:test.properties”)就可以完成任务,但这些属性不会覆盖application.properties设置(请参见spring-boot参考文档-23.Externalized Configuration)。

然后我尝试在调用测试时使用-dspring.config.location=classpath:test.properties。那是成功的--但是我不想为每次测试执行设置这个系统属性。这样我就把它放在代码里了

@Configuration
@Import(CoreConfig.class)
@EnableAutoConfiguration
public class TestConfig {

  static {
    System.setProperty("spring.config.location", "classpath:test.properties");
  }

}

但不幸的是,这次会议又一次没有成功。

对于如何使用我一定忽略了的test.properties重写JUnit测试中的application.properties设置,必须有一个简单的解决方案。

共有2个答案

翟元凯
2023-03-14

如果使用以下注释,spring boot会自动加载src/test/resources/application.properties

@RunWith(SpringRunner.class)
@SpringBootTest

因此,将test.properties重命名为application.properties以利用自动配置。

如果您只需要加载属性文件(到环境中),您还可以使用下面的内容,如下所述

@RunWith(SpringRunner.class)
@ContextConfiguration(initializers = ConfigFileApplicationContextInitializer.class) 

[更新:重写某些属性进行测试]

  1. 添加src/main/resources/application-test.properties
  2. 使用@activeprofiles(“test”)注释测试类。

这将根据这里定义的规则将application.propertiesapplication-test.properties属性加载到测试用例的应用程序上下文中。

演示-https://github.com/mohnish82/so-spring-boot-testprops

黄浩涆
2023-03-14

可以使用@TestPropertySource重写Application.Properties中的值。从其Javadoc:

测试属性源可用于有选择地重写在系统和应用程序属性源中定义的属性

例如:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = ExampleApplication.class)
@TestPropertySource(locations="classpath:test.properties")
public class ExampleApplicationTests {

}
 类似资料:
  • 我想在测试中重写Application.properties中定义的属性,但@TestPropertySource只允许提供预定义的值。 我需要的是在一个随机端口N上启动一个服务器,然后将这个端口传递给spring-boot应用程序。端口必须是短暂的,以允许在同一主机上同时运行多个测试。 我指的不是嵌入式http服务器(jetty),而是在测试开始时启动的一些不同的服务器(例如zookeeper)

  • 我正在学习JUnit5和测试用例。我使用的是spring boot version'2.2.6.Release和JUnit5,在我的应用程序中,我有一个基于属性文件中的布尔标志进行处理的方法。 \src\main\resources\application.properties 数据库连接属性用于创建数据库连接 ControllerTest.java 默认情况下,该标志为false,因此每次测试用

  • 我做错了什么?我正在使用这个小型独立应用程序,它运行并查找我的。相同的配置在JUnit中不起作用,请参阅下面: 以下不起作用,中的相同属性未加载并且只有值:

  • 我想覆盖应用程序中定义的属性。属性通过cmd与应用程序中现有的其他属性。属性,但仅允许提供预定义值。 我需要的是通过应用程序中已经存在的命令行传递调度的参数。属性,它将更改在调度中定义的默认值。 我的问题是,当我从cmd执行jar文件时,它正在获取构建时存在于中的值。它没有覆盖现有值值。我想根据用户需要覆盖值。 Spring代码 应用属性 在cmd中

  • 我有一个测试: 这是控制器(测试类)中的相关部分: 我有一个在下,我需要覆盖它,仅针对名为 也许我可以使用另一个文件“application.properties”和另一个类测试,但我正在寻找一个更智能的解决方案。

  • 我正在尝试将测试添加到我的Spring Boot应用程序,但当我这样做时,应用程序无法启动。 我有一个自定义的jwt授权类来验证jwt,我不确定这是否会导致任何问题? 以下是我使用服务器的安全配置类: 下面是堆栈跟踪: 不知道从哪里开始,我在这里没有找到任何解决的线程。请向我解释一下,将不胜感激! 编辑:我有一个常规app.properties: 还有一个正在测试/资源: