2013-01-17 66 views
1

如何通過代碼以編程方式檢索和修改@ConfigurationContext?通過代碼以編程方式檢索並修改@ConfigurationContext?

我有一個默認配置,它包含有效的xml文件。

現在我需要爲特定的測試用例添加無效的配置並測試相同的配置。

如何通過代碼以編程方式覆蓋,檢索和修改@ConfigurationContext?

由於提前, 本Kathir

+0

是不是更容易,更好,如果你只需要創建一個新的上下文文件,然後用註釋測試類'@ContextConfiguration( 「classpath中:新的上下文file.xml」)'?至少在JUnit中是這樣的 – ThanksForAllTheFish

+0

但是它會使整個測試類都失敗,我想通過測試用例並記錄錯誤。我需要爲此創建斷言語句。 – Kathir

回答

0

免責聲明:我假設你正在使用JUnit因爲你沒有在你的回覆我的評論意見不同。
我認爲你所要做的並不是很有意義,在我看來,爲了能夠做一個以上的測試,爲你的非工作配置創建一個專門的測試類更好。但是:

  1. @RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = {"classpath:/working-context.xml"})註釋您的測試類。通過這種方式,您可以通過兩種方式檢索配置上下文:首先,您可以簡單地聲明將包含工作上下文的字段@Inject ApplicationContext context。或者,你讓你的測試課implements ApplicationContextAware,然後寫一個public void setApplicationContext (ApplicationContext applicationContext)。我會去第二個,因爲它將以編程方式改變上下文。
  2. not-working-context.xml並把它放在你的classpath
  3. 您要失敗,與context = setApplicationContext(new ClassPathXmlApplicationContext("not-working-context.xml"));重新加載應用程序上下文和測試所有你喜歡的錯誤的測試方法。
  4. 儘管站在測試用例順序上並不是一個好習慣,但要確保失敗的測試將作爲最後一個測試(測試按字母順序執行),因此您不必在其他測試中重新加載工作環境。



最終測試類的樣子:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"classpath:/working-context.xml"}) 
public class TestClass implements ApplicationContextAware { 
    private ApplicationContext context; 

    public void setApplicationContext(ApplicationContext context){ 
    this.context = context; 
    } 

    //Other tests 

    @Test 
    public void zFailingTest() { 
    context = setApplicationContext(new ClassPathXmlApplicationContext("not-working-context.xml")); 
    //your test 
    } 
} 
+0

當我加載無效的dozer mapping.xml,其中的類名稱不正確,而不是加載成功,它會引發錯誤。引起:org.xml.sax.SAXParseException:cvc-elt.1:找不到元素的聲明'映射。什麼可能是錯誤的? Xml標題如下所示:<?xml version =「1.0」encoding =「UTF-8」?> Kathir

+0

你試圖(如果我猜錯了,請糾正我)來測試Spring配置文件在缺少類,錯別字等方面的錯誤時的行爲。但是。基本上,Spring是一個在準備好使用之前會做很多工作(實例化,IoC等)的框架。你不能單元測試這種東西,因爲所有的相關工作都是在環境提供給你之前完成的,所以所有的失敗都會導致環境被關閉。開始閱讀[this](http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/index.html) – ThanksForAllTheFish