【问题标题】:How to test that Spring Boot does *not* start if datasource creation failed如果数据源创建失败,如何测试 Spring Boot *not * 启动
【发布时间】:2019-06-25 14:41:03
【问题描述】:

有没有办法编写单元测试以确保如果某个 bean 创建失败,spring boot API 不会启动。例如:未能创建数据源 bean。

【问题讨论】:

  • 如果 bean 创建失败,除非有条件处理,否则 Spring Boot 根本不会启动。是否要覆盖单元测试中的 bean 定义以实现此目的?
  • 要求是编写测试以确保如果 bean 创建失败,spring boot 将不会启动,有没有办法做到这一点?
  • 如果您想检查某个 bean,您可以在 baeldung.com/spring-boot-testing 进行类似示例 7 的测试,然后将所需的 bean 自动装配到您的测试中,然后断言它不为空。或者,您可以点击 /beans 端点并按名称检查 bean。但是,这是在测试 Spring 框架而不是您的代码。您应该质疑为什么这是一个要求,因为这听起来像是一种误解。如果您尝试编写一个测试来证明服务器不可能在没有 bean 的情况下启动,那是不可能的。测试可以证明错误,但不能证明没有错误。
  • 您能否为您遇到的问题创建一个最小(如果需要合成)示例?
  • 感谢所有有用的回复,我能够使用此链接找到解决方案 - stackoverflow.com/questions/31692863/…

标签: java unit-testing spring-boot spring-test


【解决方案1】:

这段代码应该为你做:

@RunWith(SpringRunner.class)
@SpringBootTest
public class AnyAppNameApplicationTests {

    @Test
    public void contextLoads() {
    }

}

来自文档:

可以在运行 Spring Boot 的测试类上指定的注解 基于测试。提供以下功能 常规 Spring TestContext 框架:

  • 当没有定义特定的@ContextConfiguration(loader=...) 时,使用 SpringBootContextLoader 作为默认的 ContextLoader。
  • 在不使用嵌套 @Configuration 且未指定显式类时自动搜索 @SpringBootConfiguration
  • 允许使用 properties 属性定义自定义环境属性。
  • 提供对不同 webEnvironment 模式的支持,包括启动完全运行的 Web 服务器的能力,该服务器侦听已定义或 随机端口。
  • 注册一个 TestRestTemplate 和/或 WebTestClient bean,以便在使用完全运行的 Web 服务器的 Web 测试中使用。

如果您使用的是 JUnit 4,请不要忘记添加 @RunWith(SpringRunner.class) 到你的测试,否则注释 将被忽略。如果您使用的是 JUnit 5,则无需添加 等效 @ExtendWith(SpringExtension)@SpringBootTest 和 其他@…Test注解已经用它注解了。

【讨论】:

    猜你喜欢
    • 2021-03-20
    • 2017-04-12
    • 2015-03-28
    • 2016-12-23
    • 1970-01-01
    • 2020-04-06
    • 2020-12-25
    • 2019-07-04
    • 2013-12-01
    相关资源
    最近更新 更多