怎样编写Action测试用例

  关于测试的写法,在中国软件工程网(www.rjgc.net有相关的资料,推荐大家去看看。
  我们通常在开发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中所有的拦截器,包括其中的参数拦截器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值