• EasyMock


      JUnit是Java开发中常用的单元测试工具,对方法的测试很合适,但是一些情况下,JUnit就不是很适用了:

       对象结构复杂、难以构造,对象的某些行为很难触发 。这时可以使用Mock来创建对象进行测试,同时还可以Mock一个未实现的接口来进行测试,简单的看就是模拟。

      EasyMock是针对Java的Mock工具,通过 EasyMock,我们可以为指定的接口动态的创建 Mock 对象:

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

      下载所需的jar包:easymock-3.2.jar,junit-4.4.jar,objenesis-1.1.jar。

       

      EasyMock-3.1 之前默认只支持为接口生成 Mock 对象,如果需要为类生成 Mock 对象,需要扩展包实现此功能。EasyMock-3.1之后的可为类Mock对象,但是需要objenesis的jar包。

      final,private和静态方法,easymock也无法mock其行为,这时可以考虑PowerMock。

      假如有一个IStudent接口类和StudentApplication类,StudentApplication类中用到了IStudent中的没实现的方法,而我想测试StudentApplication,这时用EasyMock构造一个IStudent的Mock对象,并给要用到的的未实现的方法设定已知返回值。

      IStudent接口类:

    package easyMock;
    
    public interface IStudent {
        public String doMethod1();
        public String doMethod2();
        public String doMethod3();
    
    }

      StudentApplication类:

    package easyMock;
    
    public class StudentApplication {
        IStudent student=null;
        public StudentApplication(){
            
        }
        
        public String doMethod(){
            String str1=student.doMethod1();
            String str2=student.doMethod2();
            String str3=student.doMethod3();
            return str1+str2+str3;
        }
    
        public IStudent getStudent() {
            return student;
        }
    
        public void setStudent(IStudent student) {
            this.student = student;
        }
        
        
    
    }

      测试类TestStudentApplication:

    package easyMock;
    import org.easymock.EasyMock;
    import org.junit.Assert;
    import org.junit.Before;
    import org.junit.Test;
    
    public class TestStudentApplication {
        IStudent student;
        StudentApplication application;
        
        @Before
        public void init(){
            //使用 EasyMock 生成 Mock 对象;
            student=EasyMock.createMock(IStudent.class);
        }
        
        @Test
        public void testdoMethod(){      
            //设定 Mock 对象的预期行为和输出
            EasyMock.expect(student.doMethod1()).andReturn("a").times(1);
            EasyMock.expect(student.doMethod2()).andReturn("b").times(1);
            EasyMock.expect(student.doMethod3()).andReturn("c").times(1);
            //将 Mock 对象切换到 Replay 状态
            EasyMock.replay(student);
            //调用 Mock 对象方法进行单元测试
            application=new StudentApplication();
            application.setStudent(student);
            String getStr=application.doMethod();
            //对 Mock 对象的行为进行验证
            String cstr="abc";//正确的字符串
            Assert.assertEquals(getStr, cstr);
            EasyMock.verify(student);
           
        }
    }

     运行单元测试,测试结果为true。

     http://raychase.iteye.com/blog/1459228

  • 相关阅读:
    C# WinForm程序退出的方法
    SpringCloud 微服务框架
    idea 常用操作
    Maven 学习笔记
    SpringBoot 快速开发框架
    html 零散问题
    Java方法注释模板
    Seating Arrangement
    hibernate 离线查询(DetachedCriteria)
    hibernate qbc查询
  • 原文地址:https://www.cnblogs.com/lnlvinso/p/4249101.html
Copyright © 2020-2023  润新知