- 初始化——准备一些测试前提条件。例如新建需要测试的类的实例
- 调用被测试的方法
- 验证结果——测试结果是否与预期一致
- 释放资源或删除文件(optional)
单元测试的测试重点是测试类的 方法,对于其中的 方法的具体实现不关心。
- 对于直接返回结果方法:可以用 测试框架的 语句
- 对于 类型的方法:需要利用 的测试框架,例如
TDD(Test Drived Development)
在项目初期采用TDD开发,在方法实现前,先写对应的单元测试代码,需要注意方法的Input 和 Output,不去想具体实现细节。也可以考虑方法的一些异常,各种情况的预期结果。这样会对方法的边界以及架构有更清晰的认识。
JUnit4 框架是Java中最基础的测试框架。
讯享网
更多验证结果的用法,参看JUnit4 官方文档:Assertions
验证Exception需要在 注解上加上 参数,表明期望出现的异常。如果测试代码中没有抛出异常则会报错。
不过这种验证异常的方法还是有所限制的:不能验证异常中的 message,也无法验证出现异常中其他属性的值,不过 JUnit 4 提供了另外一种方式可以验证异常,可以解决这些问题。
讯享网
例如在 中的两个方法 和 都需要有相同的初始化工作—— 创建 对象。而 和 可以很好地将相同的初始化和收尾工作抽象出来。
Output:
讯享网
我们可以看到, 总共运行了两次,并且 并没有变,说明两次 是并行的。
和
其实在例子中 和 方法不需要在每个测试方法之前都运行一次, 标记的方法会在该类的测试方法运行前运行一遍,只会执行一次,然后在所有测试方法运行完后会运行一次 标记的方法。
不过 和 注解,标记的方法应该为静态方法。
Output:
讯享网
忽略某些测试方法
有时因为一些原因,例如正式代码还没有实现,想让 JUnit 暂时不允许某些测试方法,这时就可以使用 注解,例如:
fail 方法
有时候可能需要故意让测试方法运行失败,例如在 catch 到某些异常时,这时可以使用fail方法:
讯享网
JUnit 4 中的 可以达到同样的效果, 在测试类中声明后,测试类中的所有测试方法都要遵守Rule。
可以很方便地添加额外代码或者重新定义测试行为。Junit 4 中自带的 有 、 、 、 、 、 、 、,其中 可以验证异常的详细信息, 可以指定测试方法的最大运行时间。
Timeout 示例:
如上述代码所示,每个 的运行时间都不会长于 1 秒钟。
自定义Rule示例: CustomRule
讯享网
Test Class:
Output:
讯享网
Kotlin 语言还提供了一个 库,它定义了一些全局函数,可以在编写测试代码不用导入 ,还可以使用高阶函数作为验证语句的参数。
库提供一些全局函数,如 、 ,更多详细内容请看 Package kotlin.test。
在实际开发中,软件中是充满依赖关系的,我们会基于Dao(数据访问类)写service类,而又基于service类写操作类。
在传统的JUnit单元测试中,我们没有消除对对象的依赖。
如存在A对象方法依赖B对象方法,在测试A对象的时候,我们需要构造出B对象,这样子增加了测试的难度,或者使得我们对某些类的测试无法实现。这与单元测试的思路相违背。
而Mock这种测试可以让你无视代码的依赖关系去测试代码的有效性。
核心思想就是如果代码按设计正常工作,并且依赖关系也正常,那么他们应该会同时工作正常。
Junit 4 测试框架可以验证有直接返回值的方法,Mocking 框架可以对 方法做测试。
方法的输出结果其实是调用了另外一个方法,所以需要验证该方法是否有被调用,调用时参数是否正确。Mocking 框架可以验证方法的调用.
目前流行的 Mocking 框架有 Mockito、JMockit、EasyMock、PowerMock 等。
选择Mockito 框架的原因是:
(1)Mockito 是 Java 中最流行的 mocking 框架;
(2)Google 的 Google Sample 下的开源库中使用也是 Mockito 框架。下面介绍 Mockito 框架一些概念和用法,以及 Kotlin 中 mockito-kotlin 库的使用。
首先,需要再 中添加依赖:
讯享网
然后Mockito框架的示例如下:
创建 对象是 Mockito 框架生效的基础,有两种方式 和 。
对象的属性和方法都是默认的,例如返回 、默认原始数据类型值(0 对于
/ )或者空的集合,简单来说只有类的空壳子——假执行。
而 对象的方法是真实的方法——真执行,不过会额外记录方法调用信息,所以也可以验证方法调用。
讯享网
Mockito 还提供了 等注解来简化创建 mock 对象的工作
除了显式地调用 外,还可以使用 或者 。使用方式如下:
讯享网
Mockito 中可以很方便地验证 对象或 对象的方法调用,通过 方法即可:
验证执行次数,参数也必须一致
Stub就是把需要测试的数据塞进对象中,使用基本为:
讯享网
使用 时,我们只关注于方法调用和返回结果。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/196006.html