2017-06-19 48 views
0

我的團隊和我在Spring中做了一個Web應用程序作爲項目,我們必須測試我們的大部分代碼。問題是我們在相當多的方法中使用了FaceContext消息,並且總是當我們嘗試測試這些方法時,我們在FaceContext-Messages處獲得NullPointerException。 我怎樣才能避免或抓住他們?如何在Junit測試中避免來自FaceContext的NullPointerException?

我們目前的解決方案是使用@Test(expect = NullPointerException.class),但那不是我們想要的方式。這可能在Junit中嗎?或者我需要Selenium嗎?

一個例子是:

public boolean validateInfo(){ 
    boolean correct = true; 
    if(startDate == null || endDate == null) { 
     if(startDate == null) 
    FacesContext.getCurrentInstance().addMessage("msg", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Gib ein Startdatum an!", "")); 
     if(endDate == null)    FacesContext.getCurrentInstance().addMessage("msg", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Gib ein Enddatum an!", "")); 

     return false; 
    } 
    if(startDate.after(endDate)) { 
     FacesContext.getCurrentInstance().addMessage("msg", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Startdatum muss vor dem Enddatum sein!", "")); 
     correct = false; 
    } 

    if(maxChildren < 1) { 
     FacesContext.getCurrentInstance().addMessage("msg", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Max. Kinderanzahl muss größer 0 sein!", "")); 
     correct = false; 
    } 

    if(bringTime.after(pickupTime)) { 
     FacesContext.getCurrentInstance().addMessage("msg", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Bringzeit muss vor dem Abholzeit sein!", "")); 
     correct = false; 
    } 
    return correct; 
} 

它進入第一個FaceContext消息和拋出一個NullPointerException。有人可以幫忙嗎? StackOverflow上的其他解決方案沒有幫助。

+0

你怎麼啓動程序?你是否託管在某些本地服務器上? –

回答

1

簡單:您的生產代碼正在調用可能返回null的靜態方法。

你可以使用PowerMock或JMockit等框架來模擬模擬那個靜態調用。

當然,更好的方法是避免靜態調用並依賴依賴注入。因爲嘲弄靜態的東西被認爲是不好的做法。所以更好的方法是將生產代碼更改爲更容易測試,而不是轉向此類框架來「修復」您的設計問題。

1

問題是,一個facesContext不是一個單身,並在運行時啓動一個請求。 Junit的將無法處理該請求本身ITLL需要被嘲笑起來,或存根。看到更多關於這裏的FacesContext

http://illegalargumentexception.blogspot.com/2011/12/jsf-mocking-facescontext-for-unit-tests.html

,這裏是javadoc的 http://docs.oracle.com/javaee/6/api/javax/faces/context/FacesContext.html

+0

其實沒有看到你的答案!我也喜歡這樣,給你豎起大拇指! –

+1

對我而言,今天把我踢到了每日上限! – GhostCat

相關問題