2016-12-15 47 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