【问题标题】:Catching application context error spring junit捕获应用程序上下文错误spring junit
【发布时间】:2017-05-01 03:34:06
【问题描述】:

我正在为基于 Spring Boot 的应用程序编写 junit,而我的 bean 依赖于 application-.properties 中指定的一些配置参数。 在我生成 bean 的配置类中,

@Configuration
public class AppConfig{

@Value("${MyProperty}")
private String myProperty;

@Bean
public myBean bean1() throws MyException{
  if(myProperty.contentEquals("abc"){
     throw MyException("Value abc not allowed for bean1");
  }
}

在我的 junit 中,我想检测这种情况,如果在我的 junit 中我设置配置文件并运行它,错误提示“应用程序启动失败”并且没有达到我之前的方法或测试方法。

我该如何处理这个问题,以便 junit 不会失败,并且我也能够检测到 myexception。 基本上我需要的是应用程序上下文创建失败,但我的单元测试通过。

谢谢!

【问题讨论】:

    标签: java spring junit spring-boot spring-test


    【解决方案1】:

    beans依赖于application-.properties中指定的一些配置参数

    这可以通过 bean 定义上的 @ConditionalOnProperty 注释直接控制。因此,如果您的配置不存在,您根本不会注册它,而不是在您的测试 bean 中抛出异常:

    我正在为基于 Spring Boot 的应用程序编写 junit,而我的 bean 依赖于 application-.properties 中指定的一些配置参数。在我生成 bean 的配置类中,

    @ConditionalOnProperty(name = "myProperty", havingValue = "'hiThere'")
    @Bean
    public myBean bean1() {
       //..
    }
    

    如果你想在属性上调用一些SpEL 操作,你可以使用@ConditionalOnExpression

    @ConditionalOnExpression("${myProperty}.contains('ere')")
    @Bean
    public myBean bean1() {
       //..
    }
    

    【讨论】:

    • 我了解属性注释的条件,感谢您的建议。但这带来了另一个问题,即即使没有创建 bean,应用程序也会启动。我不应该让这种情况发生。据我了解,这只能通过在 bean 工厂方法中抛出异常来实现。这就是我目前在我的代码中所做的。在我的单元测试中我可以检测到吗?
    • 在这种情况下,您必须直接在测试方法中启动上下文才能检测到异常
    • 你能建议怎么做吗?我使用 SpringRunner 进行单元测试。
    猜你喜欢
    • 1970-01-01
    • 2012-01-20
    • 2010-09-12
    • 2013-02-03
    • 2012-11-21
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    相关资源
    最近更新 更多