2010-02-18 58 views
2

如果在創建支持bean之前沒有在上下文中提供值,Seam組件將會失敗。我已經能夠手動測試這個,但想用單元測試來涵蓋這個場景。使用異常篩選器和expectedExceptions註釋進行Seam單元測試

當Seam試圖創建輔助bean時,我基本上得到了org.jboss.seam.InstantiationException,這是由java.lang.IllegalArgumentException造成的。這很好,而且是我期望會發生的事情。問題在於,當我編寫單元測試時,我無法圍繞new FacesRequest(..) {}.run();進行嘗試/捕獲,或者使用expectedExceptions註釋。在這兩種情況下,該異常都未被捕獲並導致測試失敗。我想這是因爲Seam的異常過濾器,但我不知道有足夠的瞭解過濾器知道正確的方式來測試這個..

我與註釋代碼看起來是這樣的:

// also tried IlligalArgumentException here 
@Test(enabled = true, expectedExceptions = InstantiationException.class) 
public void noDataTest() throws Exception 
{ 
    login(USERNAME); 

    // the stack trace says that the test fails on the next line. 
    // this is expected. 
    new FacesRequest("/blah/blah/show.xhtml") { 

     @Override 
     protected void updateModelValues() { 
     } 

     @Override 
     protected void invokeApplication() 
     { 
      // we should never get here 
      // i'll put an failure here eventually 
     } 
    }.run(); 
} 
+0

@Chris Williams不錯,但您能提供更多詳細信息:您的組件,其範圍,每種測試方法包含的內容 – 2010-02-18 04:41:47

+0

@Arthud Ronald FD Garcia,當我找出問題時,我正準備提供更多信息。請參閱下面的答案。 – 2010-02-18 17:25:22

回答

2

我找到了答案。希望這可以幫助別人的頭撞牆..

我正在尋找一個特定的異常,但Seam捕捉異常,斷言發生了錯誤,然後拋出一個java.lang.AssertionError( java.lang.Error,而不是java.lang.Exception)。捕捉正確的Throwable並在註釋中使用正確的類型現在工作..

+0

+1。不要忘記標記這個答案**接受**。你可以接受你自己的答案。除此之外,社羣可能會因爲不被接受而時常提起這個話題。 – BalusC 2010-02-18 17:32:03

+0

會做。必須等待1天... – 2010-02-18 18:34:48

+0

相關提示(+1) – 2010-02-18 20:39:55

0

在我看來,你的測試用例期望一個空的無參數構造函數在支持bean可能會丟失

+0

@foo,這實際上是一個需要注入屬性的bean,並在其init()方法中使用該屬性來執行查找。由於該屬性不存在,查找失敗(IllegalArgumentException)並且無法創建對象(InstantiationException)。問題是引發的異常不能被try/catch或expectedExceptions註解捕獲。 – 2010-02-18 01:50:09

相關問題