我使用Struts 2 JUnit插件測試我的Struts 2 Web應用程序,跟隨this。Struts 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)
。
單元測試不應該包含數據庫層;你是不是在嘲笑你的服務? –
通常我想測試一下,我的行爲是做他們應該做的。在這個例子中,RegistrationAction在DB上寫一個新用戶。 – MrMoog
這是一個集成測試,因爲您正在測試多件事情。單元測試會根據您的用戶服務的已知行爲來檢查行爲,該行爲將被模擬/存根以模擬服務可能展現的所有/最可能的條件。 –