編寫Action測試web用例

          我們通常在開發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(”website”,” http://www.bt285.cn  ″);

          params.put(”name”,”小說″);

          params.put(”voucherService”, voucherService);

          Map extraContext = new HashMap();

          extraContext.put(ActionContext.PARAMETERS,params);

          try {

          proxy = ActionProxyFactory.getFactory().createActionProxy(”/ http://www.5a520.cn 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中所有的攔截器,包括其中的參數攔截器

          posted on 2009-03-21 23:24 wang9354 閱讀(1515) 評論(0)  編輯  收藏

          導航

          <2009年3月>
          22232425262728
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          統計

          常用鏈接

          留言簿(2)

          隨筆檔案

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 平阳县| 绵竹市| 永定县| 平邑县| 堆龙德庆县| 潮州市| 建水县| 内乡县| 抚松县| 丰镇市| 彰化县| 遂溪县| 锡林浩特市| 象山县| 台湾省| 蚌埠市| 酒泉市| 六安市| 马公市| 淮安市| 石阡县| 安塞县| 大田县| 湘阴县| 轮台县| 屯门区| 喀喇沁旗| 利津县| 锦屏县| 富宁县| 龙陵县| 西充县| 江川县| 东兴市| 确山县| 新巴尔虎左旗| 瑞安市| 宁强县| 汉川市| 柳林县| 珠海市|