编写Action单元测试用例
2009-03-17 12:59
260 查看
我们通常在开发web应用过程中,展现层Action的单元测试经常被我们忽视了,主要原因是:
1、action层的业务逻辑比较简单。大家潜意识认为这一部分的代码不重要。
2、action层难以模拟http请求传递的参数,依赖web容器,给单元测试编写带来一定的难度。
我写了一个简单的action单元测试用例,供大家参考。基于struts的mock和webwork的ActionProxyFactory都可以进行action的单元测试。我个人比较倾向与ActionProxyFactory做单元测试。其实写action单元测试非常简单,大致分为三步就可以完成单元测试:
一、设置actionContext上下文参数
将表单传递的请求参数添加到map中
二、创建action动态代理对象
通过public abstract ActionProxy createActionProxy(String namespace, String actionName, Map extraContext) throws Exception 创建action代理对象。
三、junit断言执行结果
assertEquals(testAction.login(),"success")
详细用例参考
注:创建代理action一定要执行proxy.execute()方法,否则参数不能够增加到actionContext上下文中。因为proxy.execute()中会执行 invocation.invoke()核心方法,遍历执行action中所有的拦截器,包括其中的参数拦截器。
1、action层的业务逻辑比较简单。大家潜意识认为这一部分的代码不重要。
2、action层难以模拟http请求传递的参数,依赖web容器,给单元测试编写带来一定的难度。
我写了一个简单的action单元测试用例,供大家参考。基于struts的mock和webwork的ActionProxyFactory都可以进行action的单元测试。我个人比较倾向与ActionProxyFactory做单元测试。其实写action单元测试非常简单,大致分为三步就可以完成单元测试:
一、设置actionContext上下文参数
将表单传递的请求参数添加到map中
二、创建action动态代理对象
通过public abstract ActionProxy createActionProxy(String namespace, String actionName, Map extraContext) throws Exception 创建action代理对象。
三、junit断言执行结果
assertEquals(testAction.login(),"success")
详细用例参考
public class TestActionTest extends BaseCaseTest{ private ActionProxy proxy = null; private IVoucherService voucherService; @Before public void setUp() throws Exception { IMocksControl control = EasyMock.createControl(); voucherService = control.createMock(IVoucherService.class); Map<String, Object> params = new HashMap<String, Object>(); params.put("loginId","test"); params.put("password","111111"); params.put("voucherService", voucherService); Map extraContext = new HashMap(); extraContext.put(ActionContext.PARAMETERS,params); try { proxy = ActionProxyFactory.getFactory().createActionProxy("/user", "testAction", extraContext); proxy.setExecuteResult(false); assertEquals(proxy.execute(),"success"); } catch (Exception e) { e.printStackTrace(); } } @Test public void testLogin() { TestAction testAction = (TestAction) proxy.getAction(); assertEquals(testAction.login(),"success"); } }
注:创建代理action一定要执行proxy.execute()方法,否则参数不能够增加到actionContext上下文中。因为proxy.execute()中会执行 invocation.invoke()核心方法,遍历执行action中所有的拦截器,包括其中的参数拦截器。
相关文章推荐
- 如何编写单元测试用例(白盒测试)
- Dao 层单元测试用例编写
- 如何编写单元测试用例(白盒测试)
- 如何编写单元测试用例
- VS2010编写动态链接库DLL及单元测试用例,调用DLL测试正确性
- 如何编写单元测试用例(白盒测试)
- 以下题目均在bookstore项目上完成(请先运行数据库文件): 1、编写单元测试用例,对用户注册功能的Action层进行测试。(注意:测试用例应考虑成功和失败的情况)
- 如何编写单元测试用例(白盒测试)。
- VS2010编写动态链接库DLL及单元测试用例
- 如何编写单元测试用例(白盒测试)
- 如何编写单元测试用例(白盒测试)。
- 编写单元测试用例(摘抄)
- 转载:如何编写单元测试用例(白盒测试)
- 测试驱动javascript开发 -- 2.单元测试一例:学习断言、测试用例函数的编写
- 单元测试一例:学习断言、测试用例函数的编写
- 2、编写单元测试用例,对用户注册功能的DAO层进行测试。(注意:测试用例应考虑成功和失败的情况)
- 如何编写单元测试用例(白盒测试)
- VS2010编写动态链接库DLL及单元测试用例,调用DLL测试正确性
- VS2010编写动态链接库DLL及单元测试用例,调用DLL测试正确性
- 单元测试的测试用例编写方法