2011-06-27 86 views
6

我想用jUnit插件測試我的動作類。動作看起來是這樣的:當結果類型爲瓦時,單元測試失敗

@Action(value = "default", results = { 
    @Result(name = "success", type="tiles", location = "login") }) 
public String defaultAction() { 
    return SUCCESS; 
} 

當我打電話proxy.execute(),測試崩潰。我可能會忘記 ,這讓我的測試能夠與瓦片一起運行,但我不知道這可能是什麼。 我得到以下堆棧跟蹤:

java.lang.NullPointerException 
at org.apache.struts2.views.tiles.TilesResult.doExecute(TilesResult.java:105) 
at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186) 
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:373) 
... 

當我更改爲下面的動作,測試正常執行:

@Action(value = "default", results = { 
    @Result(name = "success", type="redirectAction", location = "login") }) 
public String defaultAction() { 
    return SUCCESS; 
} 
+0

您可能會嘗試查看TilesResult中的第105行,以查看會導致NPE的原因。 –

+0

'TilesContainer container = TilesAccess.getContainer(servletContext); ... container.render(location,request,response);''container'爲null。但我不知道爲什麼。 – Hayk

回答

8

之前proxy.execute(),該executeResult應設置false值:proxy.setExecuteResult(false)

+0

「[npe-in​​-strutstestcase-after-enabled-tiles](http://stackoverflow.com/questions/5823709/npe-in​​-strutstestcase-after-enabling-tiles#9062291)」的答案顯示瞭如何設置junit和瓷磚通過NPE – rveach