http://www.blogjava.net/joan/ 博客地址

怎样编写Action测试用例

上一篇 / 下一篇  2009-07-21 13:05:34 / 个人分类:LR

       我们通常在开发web应用过程中,展现层Action的单元测试经常被我们忽视了,主要原因是:51Testing软件测试网$h z9F0@fT&OR.CW;X7y

  1、Action层的业务逻辑比较简单。大家潜意识认为这一部分的代码不重要。

.}y)}l4aY!|051Testing软件测试网]']`-Zk[V"v

  2、Action层难以模拟http请求传递参数,需要依赖web容器,因此给单元测试编写带来一定的难度。

xr)vz@051Testing软件测试网 ahAN N?'Ok ~)Hw

  下面是一个简单的Action单元测试用例,供大家参考。基于struts的mock和webwork的ActionProxyFactory都可以进行Action的单元测试。我个人比较倾向与ActionProxyFactory做单元测试。其实写action单元测试非常简单,大致分为三步就可以完成单元测试:

YK#~"U:m7?3D6E#QS/c0

5Pr5C'_7b-[b0  一、设置ActionContext上下文参数

'H s3t:r$|(j5?d0

coxFGL/Xi6W0  将表单传递的请求参数添加到map中

&V;[pNncx051Testing软件测试网9rv f$eVK o|p

  二、创建Action动态代理对象51Testing软件测试网pnd2dD|0sb

51Testing软件测试网Q[)cV-E{T

  通过public abstract ActionProxy createActionProxy(String namespace, String actionName, Map extraContext) throws Exception 创建action代理对象。

BAx'nM051Testing软件测试网7V:t[ r znE S

  三、junit断言执行结果

W'X5GY;m^0
assertEquals(testAction.login(),”success”)
51Testing软件测试网|/d!o M6T-Dx

  详细用例参考:51Testing软件测试网LbL5w,e

.\b2n:E MN0  public class TestActionTest extends BaseCaseTest{51Testing软件测试网EK,D G:L

51Testing软件测试网 XaQ5|M5_9\

  private ActionProxy proxy = null;51Testing软件测试网*E?/?/S5J

'Gl.a2S2o z+?)a#t^0  private IVoucherService voucherService;

2@DQ O:v?;?T051Testing软件测试网H&[jb7K)uTr

  @Before51Testing软件测试网+Rhx$b^@CUUp(w

51Testing软件测试网F`&^ h+I C L

  public void setUp() throws Exception {

B5s9e.O&L.W0

*],v8x+i-wG.[0  IMocksControl control = EasyMock.createControl();

WC$M[eL2x2z0

y2uKO|J0  voucherService = control.createMock(IVoucherService.class);

a'D^Pwv051Testing软件测试网H6G9eB H/htP

  Mapparams = new HashMap();51Testing软件测试网[}%b]2p#r]-w'N

TB/Ia;|y;[:DU0  params.put(”loginId”,”test”);

? Ea,A |4uq051Testing软件测试网Sj@7t/@W_V

  params.put(”password”,”111111″);

^ g@,E:n}F;L ?'Y0

F]*lV3uWQ0  params.put(”voucherService”, voucherService);51Testing软件测试网&FF~"_r[S7|W

51Testing软件测试网(H-{n9_2`*R

  Map extraContext = new HashMap();51Testing软件测试网CG3m2I7ju

51Testing软件测试网'f5eN3^2hL!MBd1B5F

  extraContext.put(ActionContext.PARAMETERS,params);

q*o0d.\ p2~0

"@ v7]-_.W@c-J,RZqu0  try {51Testing软件测试网q;nTF7j.{0ft]9s

^4okr!^ qR0  proxy = ActionProxyFactory.getFactory().createActionProxy(”/user”, “testAction”, extraContext);51Testing软件测试网 }(]$F"k6D2Q

G,rut3n}![2yv0  proxy.setExecuteResult(false);

e2@bf6g1E051Testing软件测试网}@_Y*V%q

  assertEquals(proxy.execute(),”success”);

s7t*HU{;v051Testing软件测试网t:BHv4fg8x [

  } catch (Exception e) {51Testing软件测试网!Ih{0@]N,yK

V!Z"uD{$F0  e.printStackTrace();

YX,D(N4Ww6A{6y:f051Testing软件测试网 y Y1wC,h+y(} b8A

  }

vb*OFD(q051Testing软件测试网4~tr\#|7Z

  }

V ~l5E}051Testing软件测试网f@k+l1K-X ~6a7?Z

  @Test

M [D8c2P&u'l0

Hh O!k.S9A7i}6Y%s#a0  public void testLogin() {51Testing软件测试网4\e7W,YH}0{

51Testing软件测试网5P \ U d:s-[}

  TestAction testAction = (TestAction) proxy.getAction();

U|"T,U,K7x zS @3H0

3t!o| T+Ifka1FX0  assertEquals(testAction.login(),”success”);

X-H@/b$D051Testing软件测试网L X!Nx9Q,d6IdA

  }51Testing软件测试网2Lsz z"t!aDc

fNNg0m,cA5eu!v G0  }
)M \ k&Q/yA051Testing软件测试网 V*XG;t5\cL

4GD9z G(F KOv$x4Q0  注:创建代理action一定要执行proxy.execute()方法,否则参数不能够增加到actionContext上下文中。因为 proxy.execute()中会执行 invocation.invoke()核心方法,遍历执行action中所有的拦截器,包括其中的参数拦截器。51Testing软件测试网q!EegYSk-k3n


TAG:

 

评分:0

我来说两句

日历

« 2024-04-29  
 123456
78910111213
14151617181920
21222324252627
282930    

我的存档

数据统计

  • 访问量: 6426
  • 日志数: 14
  • 建立时间: 2008-11-14
  • 更新时间: 2008-11-14

RSS订阅

Open Toolbar