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

应用程序中的Spring Boot属性。yml’未从JUnit测试加载

邹英发
2023-03-14

我做错了什么?我正在使用这个小型独立应用程序,它运行并查找我的src/main/Resources/config/application.yml。相同的配置在JUnit中不起作用,请参阅下面:

@Configuration
@ComponentScan
@EnableConfigurationProperties

public class TestApplication {

    public static void main(String[] args) {

        SpringApplication.run(TestApplication.class);
    }
}


@Component
@ConfigurationProperties

public class Bean{
    ...
}

以下不起作用,application.yml中的相同属性未加载并且Bean只有null值:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestApplication.class)

public class SomeTestClass {
    ...
}

共有3个答案

沈宏朗
2023-03-14

2017年2月的替代方案:

@SpringBootTest
@ContextConfiguration(classes = { TestApplication.class })
@RunWith(SpringRunner.class)
public class SomeTestClass {
   ...
}

精益变体(无SpringBootTest):

@ContextConfiguration(classes = { TestApplication.class },
                 initializers = { ConfigFileApplicationContextInitializer.class })
@RunWith(SpringRunner.class)
public class SomeTestClass {
杜曜灿
2023-03-14

使用@SpringBootTest在SpringBoot 2.0 w/o中加载任何自定义yml文件的技巧

  • 在测试资源中创建一些yml文件
  • 使用ConfigFileApplicationContextInitializer和spring.config。位置属性

示例代码:

@RunWith(SpringRunner.class)
@ContextConfiguration(
    classes = { MyConfiguration.class, AnotherDependancy.class },
    initializers = {ConfigFileApplicationContextInitializer.class} )
@TestPropertySource(properties = { "spring.config.location=classpath:myApp-test.yml" })
public class ConfigProviderTest {
    @Autowired
    private MyConfiguration myConfiguration; //this will be filled with myApp-test.yml 

   @Value("${my.config-yml-string}")
   private String someSrting; //will get value from the yml file.

}

对于JUnit 5,请使用@ExtenTo(SpringExtension.class)注释而不是@RunTo(SpringRunner.class)

单于煌
2023-03-14

试试这个:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestApplication.class, 
    initializers = ConfigFileApplicationContextInitializer.class)
public class SomeTestClass {
    ...
}

编辑:

对于Spring Boot 1.5版,删除了SpringApplicationConfiguration,以支持SpringBootTest或直接使用SpringBootContextLoader

您仍然可以使用带有注释的初始化器参数。

 类似资料:
  • 我正在使用一个spring启动应用程序,它运行我的src/main/resources/config/application。yml。 当我通过以下方式运行测试用例时: 测试代码仍在运行我的应用程序。要加载属性的yml文件。我想知道是否有可能再运行一个*。运行测试用例时的yml文件。

  • 我有类应用程序运行正常,当你运行它作为Spring启动应用程序和加载属性从src/main/Resources/application.yml如下 以下是application.yml详情 但是,当您尝试对上述类abc运行junit测试时,它不会从src/main/resources/application.yml上传属性。甚至我也创建了一个测试文件应用程序。测试目录下的yml

  • 我在下有一个测试属性文件。但是我无法在我的单元测试中获取要加载的值。我有以下类: 在生产代码中,加载来自src/main/resources/application的值。yml。 单元测试等级: 我试图为每个应用程序添加一个测试配置文件。yml文件,看看添加ActiveProfiles(“test”)是否有效,但没有。 src/main/resources/application。yml公司 我还

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

  • 我有不同属性的application.yml如下所示。 我使用@ConfigurationProperties将这些属性绑定到Spring组件 我将在Spring Boot控制器中注入此组件,并将此配置绑定到get-configsendpoint/控制器/配置 调用此endpoint时,期望返回 而是返回如下所示的响应 yml中的列表正在映射到Map中的对象。我们如何实现对各自数据类型的正确绑定?

  • 我有从应用程序访问属性的方法。属性 下面是测试用例: 当我访问该方法它的抛空指针。我已经声明该属性在application-test.yml。我缺少什么?任何参考或答案来解决这个问题?