单元测试

作者: 飞翔的鲲 | 来源:发表于2018-08-24 15:12 被阅读16次

https://www.jianshu.com/p/a151463d6ed3

常见mock框架


  • jmock:通过mock对象来模拟一个对象的行为,从而隔离开我们不关心的其他对象,使得测试变得简单。缺点:在执行前记录期望行为,显得很繁琐。
  • Mockito:Mockito通过在执行后校验哪些函数已经被调用,消除了对期望行为的需要,API非常简洁。缺点:对于静态函数、构造函数、私有函数等还是无能为力。
  • powermock:PowerMock是在Mockito的基础上做出的扩展。通过提供定制的类加载器以及一些字节码篡改技巧的应用,PowerMock 实现了对静态方法、构造方法、私有方法以及 Final 方法的模拟支持,对静态初始化过程的移除等强大的功能。缺点:会对字节码篡改,即测试时的字节码与平时编译出来的字节码是不一样的,而很多统计单元测试覆盖率的插件是以字节码来统计的,所以PowerMock编写的测试程序不能被统计进覆盖率。

推荐Mockito和powermock

使用方式


参考我的文章
https://www.jianshu.com/writer#/notebooks/24041444/notes/32728232/preview

  • 初始化
    使用注解(@Mock、@InjectMocks等),必须实例化mock对象,有两种方式实例化mock对象:
    @RunWith(MockitoJUnitRunner.class)
    MockitoAnnotations.initMocks(this)

  • 常用api
    when(mockObject.someMethod()).thenReturn(...)
    用来定义当条件满足时函数的返回值。
    when(mockObject.someMethod()).thenReturn(...).thenReturn(...)
    用来定义多个返回值的情况。
    doReturn(...).when(mockObject.someMethod())
    when(mockObject.someMethod()).thenThrow(new Runtime
    Exception())
    执行某方法时抛出异常。
    doThrow(new RuntimeException()).when(mockObject.someMethod())
    对void方法进行预期设定
    1.doNothing().when(mock.someMethod())
    2.doThrow(new RuntimeException()).when(mock.someMethod())
    3.doNothing().doThrow(new RuntimeException()).when(mock.someMethod())
    Mockito会自动记录自己的交互行为,可以用verify(…).methodXxx(…)语法来验证Xxx()方法是否按照预期进行了调用
    1.验证调用次数:verify(mockObject,times(n)).someMethod(argument);//n为被调用的次数
    2.验证超时:verify(mockObject, timeout(100)).someMethod();
    3.既验证调用次数,又验证是否超时:verify(mockObject, timeout(100).times(1)).someMethod();

相关文章

网友评论

    本文标题:单元测试

    本文链接:https://www.haomeiwen.com/subject/janbiftx.html