怎样编写Action测试用例

发表于:2009-3-23 15:19

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:xiaodan    来源:阿里巴巴(软件)开发者博客

  我们通常在开发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”)

  详细用例参考:

  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中所有的拦截器,包括其中的参数拦截器。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号