`
wangju19870301
  • 浏览: 36350 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

采用EasyMock对Struts2的action进行测试

阅读更多

采用Struts2+Spring+Hibernate,控制层一段被测试的代码如下:

 

/**
  * 删除费用
  * @return
  */
 public String doDeleteFeeRecord() {
     String message = "";
     PrintWriter pw = null;
     String feeRecordId = request.getParameter("feeRecordId");
     UserInfoVO userInfoVO = (UserInfoVO) session.get("userInfo");
     try {
        message = "{success:true}";
        feeRecordService.deleteFeeRecord(feeRecordId );
        logService.insertLog(userInfoVO.getLoginName(), "删除费用成功", request.getRemoteAddr(), 1);
     } catch (FinanceException e) {
        message = "{success:false}";
        try {
           logService.insertLog(userInfoVO.getLoginName(), "删除费用失败",request.getRemoteAddr(), 0);
        } catch (FinanceException ex) {
           request.setAttribute("errorText", ex.getMessage());
           return "showWebError";
        }
     }
     response.setContentType("text/json;charset=GBK");
     try {
       pw = response.getWriter();
       pw.write(message);
       pw.close();
     } catch (IOException e) {
        request.setAttribute("errorText", e.getMessage());
        return "showWebError";
     }
     return null;
 }

 

 

采用EasyMock对上面的代码进行测试,这个过程大致可以分为以下几个步骤:

  • 使用 EasyMock 生成 Mock 对象;
  • 设定 Mock 对象的预期行为和输出;
  • 将 Mock 对象切换到 Replay 状态;
  • 调用 Mock 对象方法进行单元测试;
  • 对 Mock 对象的行为进行验证。
  •  

     

    测试类如下:

    public class TestFeeRecordAction {
        private FeeRecordAction feeRecordAction = null;

     

        @BeforeClass
        public static void setUpBeforeClass() throws Exception {
        }

     
        @AfterClass
        public static void tearDownAfterClass() throws Exception {
        }

     

        @Before
        public void setUp() throws Exception {
            ApplicationContext context = new FileSystemXmlApplicationContext("E:/software/Java/workstation/financeWeb/WebRoot/WEB-    INF/FinanceContext.xml");
            feeRecordAction = (FeeRecordAction) context.getBean("feeRecordAction");
        }

     

        @After
        public void tearDown() throws Exception {
            feeRecordAction = null;
        }

     

        @Test
        public void testDoDeleteFeeRecord() throws IOException {

            /**

             * 生成Mock对象

             */
            HttpServletRequest request = EasyMock.createMock(HttpServletRequest.class);
            feeRecordAction.setServletRequest(request);

     

            HttpServletResponse response = EasyMock.createMock(HttpServletResponse.class);
            feeRecordAction.setServletResponse(response);

     

            Map<String, UserInfoVO> map = new HashMap<String, UserInfoVO>();
            UserInfoVO userInfoVO = new UserInfoVO();
            userInfoVO.setLoginName("admin");
            map.put("userInfo", userInfoVO);
            feeRecordAction.setSession(map);

     

             /**

             * 设定 Mock 对象的预期行为和输出

             */

            EasyMock.expect(request.getParameter("feeRecordId")).andReturn("1").once();
            EasyMock.expect(request.getRemoteAddr()).andReturn("192.168.1.103").once();
            PrintWriter pw = new PrintWriter(System.out, true);
            EasyMock.expect(response.getWriter()).andReturn(pw).once();

     

            /**

             * 将 Mock 对象切换到 Replay 状态

             */

            EasyMock.replay(request);
            EasyMock.replay(response);

     

            /**

             * 调用 Mock 对象方法进行单元测试

             */

            feeRecordAction.doDeleteFeeRecord();

     

            pw.flush();

     

            /**

             * 对 Mock 对象的行为进行验证

             */

            EasyMock.verify(request);
            EasyMock.verify(response);
        }
    }

     

     

    运行测试用例时,需要将方法doDeleteFeeRecord中的response.setContentType("text/json;charset=GBK");注释掉

    分享到:
    评论

    相关推荐

      模拟测试辅助工具easyMock.zip

      EasyMock 是一套通过简单的方法对于指定的接口或类生成 Mock 对象的类库,它能利用对接口或类的模拟来辅助...本文将向您展示如何使用 EasyMock 进行单元测试,并对 EasyMock 的原理进行分析。 标签:easyMock

      easymock测试servlet

      easymock测试servlet使用代码

      EasyMock单元测试例子

      几个例子展示如何使用EasyMock进行单元测试

      easymock的使用,含demo

      本文将对 EasyMock 的功能和原理进行介绍,并通过示例来说明如何使用 EasyMock 进行单元测试。 Mock 方法是单元测试中常见的一种技术,它的主要作用是模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与...

      转:EasyMock 单元测试

      NULL 博文链接:https://xuan0506.iteye.com/blog/1041296

      easyMock

      easyMock

      Junit+EasyMock单元测试使用资料以及案例分析

      Junit+EasyMock单元测试使用资料以及案例分析,供学习单元测试的朋友学习使用!

      EasyMock 使用方法与原理剖析

      EasyMock单元测试的扩展;...EasyMock来进行测试; EasyMock如何打桩; EasyMock实践指南; EasyMock使用技巧; EasyMock使用简明手册; EasyMock使用说明; EasyMock使用手记; 用Mock object进行隔离测试;

      easymock-2.5.2.jar

      easymock-2.5.2.jar easymock-2.5.2.jar 单元测试

      easymock-3.2.jar

      EasyMock主要是为测试提供模拟数据,比如你可以模拟HttpServletRequest。

      easymock-4.2.jar

      EasyMock 是一套通过简单的方法对于指定的接口或类生成 Mock 对象的类库,它能利用对接口或类的模拟来辅助单元测试。 Mock 方法是单元测试中常见的一种技术,它的主要作用是模拟一些在应用中不容易构造或者比较复杂...

      jmock2.5.1和easymock3.0

      JMock2.5.1和EasyMock3.0以及一些JUnit单元测试所需的jar,让你使用JMock和EasyMock时不用到处找相关的jar。

      easymock-4.0-bundle

      手动的构造 Mock 对象会给开发人员带来额外的编码量,而且这些为创建 Mock 对象而编写的代码很有可能引入错误。目前,有许多开源项目对动态...通过 EasyMock,我们可以方便的构造 Mock 对象从而使单元测试顺利进行。

      easymock-request.getParamsNames

      easymock servlet 单元测试

      easymock 3.0

      easymock junit test 单元测试 java

      easymock2.4+EasyMock使用简明手册.pdf

      easymock2 EasyMock使用简明手册

      easyMock2.2.doc

      easyMock2.2

      EasyMock.jar

      EasyMock.jar 单元测试模拟对象 为实现!!

      EasyMock

      NULL 博文链接:https://bruceliu02.iteye.com/blog/1775446

      easymock-3.2.zip

      EasyMock是Java进行单元测试的一个工具,和JUnit搭配使用,该版本为3.2,该文件包括了doc文档,api文档,示例文档和所需jar包等。 该文件是从官网上下载的,请大家放心下载。

    Global site tag (gtag.js) - Google Analytics