2016-12-15 45 views
1

我正在为基于spring启动的应用程序编写junits,而我的bean依赖于application-.properties中指定的一些配置参数。 在我的配置类我在哪里产生豆类,捕捉应用程序上下文错误spring junit

@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。 基本上我需要的是应用程序上下文创建失败,但我的单元测试通过。

谢谢!

回答

0

豆取决于application-.properties

这可以通过@ConditionalOnProperty注释直接在bean定义控制指定的一些配置参数。因此,不要在你的测试bean中抛出一个异常,如果你的配置不存在,你将不会注册它:

我正在为基于spring引导的应用程序编写junits,而且我的bean依赖于一些配置参数在application-.properties中指定。在我的配置类我在哪里产生豆类,

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

如果你想调用的财产有些SpEL操作,您可以使用@ConditionalOnExpression

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

我明白物业标注的条件,谢谢您建议。 但是这打开了应用程序即使未创建bean也会启动的另一个问题。我不应该让这种情况发生。 从我的理解,只有通过在bean工厂方法中引发异常才有可能。 这就是我目前在我的代码中所做的事情。在我的单元测试中,我可以检测到吗? – Avis

+0

在这种情况下,您将不得不直接在您的测试方法中启动上下文以检测异常 – dimitrisli

+0

您可以提出建议吗?我使用SpringRunner进行单元测试。 – Avis