1

我使用Struts 2 JUnit插件測試我的Struts 2 Web應用程序,跟隨thisStruts 2 JUnit插件+休眠

在我的web應用程序中,我使用fullHibernateCore-plugin-1.4來集成Hibernate功能。

當我測試做一些冬眠的東西的動作時,它會返回NullPointerException。 從我所瞭解的情況來看,由於Struts 2 JUnit插件使用假容器來執行動作,所以HibernateSession不會被解僱。 我該如何解決這個問題?

這是一個測試例子:

public class testRegisterAction extends StrutsTestCase { 

    public void testGetActionProxy() throws Exception { 
     //set parameters before calling getActionProxy 
     request.setParameter("user.name", "TestName"); 

     ActionProxy proxy = getActionProxy("/userRegister.action"); 
     assertNotNull(proxy); 

     RegistrationAction action = (RegistrationAction) proxy.getAction(); 
     assertNotNull(action); 

} 

解決

這不是一個Hibernate的錯誤,但關於Struts的瓷磚插件之一。我正在使用Tiles,並沒有設置proxy.setExecuteResult(false),所以JUnit試圖執行所有的jsp/tiles的東西(在操作返回後)給出錯誤。在堆棧跟蹤中也存在Hibernate錯誤,所以我想(錯誤地)是Hibernate的錯誤。

我解決了設置proxy.setExecuteResult(false)

+0

單元測試不應該包含數據庫層;你是不是在嘲笑你的服務? –

+0

通常我想測試一下,我的行爲是做他們應該做的。在這個例子中,RegistrationAction在DB上寫一個新用戶。 – MrMoog

+0

這是一個集成測試,因爲您正在測試多件事情。單元測試會根據您的用戶服務的已知行爲來檢查行爲,該行爲將被模擬/存根以模擬服務可能展現的所有/最可能的條件。 –

回答

1

解決

這不是一個Hibernate的錯誤,但關於Struts的瓷磚插件之一。我正在使用Tiles,並沒有設置proxy.setExecuteResult(false),所以JUnit試圖執行所有的jsp/tiles的東西(在操作返回後)給出錯誤。在堆棧跟蹤中也存在Hibernate錯誤,所以我想(錯誤地)是Hibernate的錯誤。

我解決了設置proxy.setExecuteResult(false)

0

您可以通過您使用的是事務攔截器是無法把會議在堆棧上升級到2.2.2版本通常在site

隨着版本解決問題。

+0

不,它也適用於1.4。我認爲這是一個休眠問題,但事實並非如此!問題是由Struts Tiles插件引起的,所以現在沒關係。 – MrMoog

+0

@MrMoog好了,在問題或答案中描述你的問題,沒關係,我沒有看到瓷磚如何被關注。 –