行为和状态的测试: 基于行为的mock是站在目标测试代码外面的角度的.通常主要模拟行为。 而基于状态的是站在目标测试代码内部的。我们可以对传入的参数进行检查、匹配,才返回某些结果。Mockup用于state based测试。 一定要理解,单元测试测什么: 单元测试的原则是哪怕你测试的方法中有一行代码,也是有必要写测试方法的。所以不要担心,你测试的业务逻辑最后只剩下边界值测试。你可以根据一些MOCK的返回值比如空,非空,个数等来测试你的业务逻辑是否正确。如果业务方法依赖于第三方类库,缓存,消息队列,DAO层的方法都是可以MOCK的。 以前的思路:Service方法依赖于SDK,针对这些方法的单元测试需要与微博交互返回正确的AccessToken,这样才能Service做有意义的单元测试。这是典型的依赖于第三方或远程调用的场景。 正确的思路:新浪的API已经由新浪团队测试过。我假设它完全正确,只需要模拟它的返回值来测试我的“业务逻辑”在mock指定值下的反应。就象有些Service方法依赖于DAO层,如果DAO层的单元测试充分(比如通过DBUNIT等工具模拟数据),那么在业务层的单元测试中,只需要mock DAO层即可。 Mock的原因: 1)一些依赖单元本身已经(或者将来会有,只是目前还没有 实现而已)拥有自己的单元测试。 2)由于一些特殊原因,在测试环境中,一些并不是很容易快速的执行的单元(因为它们可能会写数据库或者发送邮件等等)。 Dependency是什么? 通过使用mocked声明,可以在指定的测试代码对一些特殊的依赖(比如新浪微博的API)进行 mock模拟,也就是说,一个mocked类型,应该是单元测试中的一个依赖类型,这些类型可以是引用、接口、抽象类、具体的类、final 类等等。 @mocked是去修饰Dependency的。 更多内容,请学习博为峰网校《走进JAVA JMockit》 课程介绍:介绍JAVA中的mock技术,结合mock框架之一的JAVA JMockit中常用的API,深入理解Mock的含义,为什么需要Mock对象,如何创建Mock对象,如何灵活使用JMockit中强大的注释功能及相关API实现注入依赖,测试隔离;如何理解两套核心API(基于行为的验证,基于状态的验证)。 课程目标:能够使用JMockit框架实现具体项目中的测试开发需求,深入理解mock技术的必要性和实用性,能够灵活运用JMockit中两套API(基于行为,基于状态)编写基于mock对象注入的测试用例,实现测试需求;为后续深入学习mock技术打下扎实的基础。 适合人群:有Java面向对象编程基础,了解TestNG,知道maven框架,对MO技术(模拟对象)在测试开发中的运用感兴趣的,并渴望不断提高自己的编码能力,技术能力,更倾向于测试开发,白盒测试发展的各界IT人士。
|