Java测试三两事

测试

Java的单元测试和集成测试是非常重要的。

集成测试

在所有组件都开发完成进行组装测试(所有对应的类都会建立实例来运行程序)。

单元测试

集成测试会构建整个Spring Context,这表示所有声明的bean,都会构建实例。在开发时,为了实现测试的高效,或是定点测试,需要使用Mock技术来屏蔽掉下层的依赖。

Java程序最小的功能单元是方法,因此,对Java程序进行单元测试就是针对单个Java方法的测试。

单元测试有什么好处呢?在学习单元测试前,我们可以先了解一下测试驱动开发。

**所谓测试驱动开发,是指先编写接口,紧接着编写测试。**编写完测试后,我们才开始真正编写实现代码。在编写实现代码的过程中,一边写,一边测,什么时候测试全部通过了,那就表示编写的实现完成了:

即:编写接口-编写测试-编写实现-运行测试(测试失败回退到 编写实现)-任务完成。

Java单元测试主要使用Junit(本文以Junit5为例)。

Junit5

介绍

JUnit 5 与以前版本的 JUnit 不同,拆分成由三个不同子项目的几个不同模块组成。

JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage

  • JUnit Platform: 用于JVM上启动测试框架的基础服务,提供命令行,IDE和构建工具等方式执行测试的支持。
  • JUnit Jupiter:包含 JUnit 5 新的编程模型和扩展模型,主要就是用于编写测试代码和扩展代码。
  • JUnit Vintage:用于在JUnit 5 中兼容运行 JUnit3.x 和 JUnit4.x 的测试用例。

它的架构如下:

Java测试三两事_第1张图片

  • @Test:Junit会将带有@Test的方法识别为测试方法;

  • @BeforeEach和AfterEach,会在运行每个Test方法前后自动运行,因此可以将一些公共的代码段(如实例)设置为以上注解,以便代码格式优美;

PS:其实在Junit的内部运行顺序伪代码如下:

Java测试三两事_第2张图片

  • 即beforeeach和aftereach会环绕在每个test前后。

与之类似的还有,after/before all/class,即在所有test方法或者类之前执行。

  • @Disable:可以跳过这个测试(在结果中会显示skipped);

EnableOnOs:可以在指定的系统上运行特定的测试;

  • @ParameterizedTest:用于参数化测试;

  • DisplayName:可以在测试过程中输出方法的别名;

  • ValueSource\EnumSource\MethodSourceCsvSource\ArgumentsSource:可以实现相应内容的注入;

参考链接

单元测试Junit简要例子

https://www.liaoxuefeng.com/wiki/1252599548343744/1255945269146912

Junit5介绍

https://www.jianshu.com/p/3183fb69fd74

SpringBoot集成mybatis

源码:https://www.jianshu.com/p/426dbf8cc64e

Mockito

介绍

Mockito框架是基于将依赖的类设置为**Mock类,**进行单元测试。

何为Mock?

——当测试目标的下层依赖的行为是可预期的,那么测试目标本身的行为也是可以预期的。于是所谓测试就是把实际的结果和测试目标的预期结果做比较,而Mock就是预先设定下层依赖的行为表现

Mock的流程就是:

  1. 将测试目标的依赖对象进行mock,设定其预期的行为表现。
  2. 对测试目标进行测试。
  3. 检测测试结果,检查在依赖对象的预期行为下,测试目标的结果是否符合预期。

我们使用Mockito,主要是生产mock对象,以及,使用mock所提供的一些方法来验证结果的正确性。

参考链接

Mockito简单上手

http://ifeve.com/%E4%B8%80%E6%96%87%E8%AE%A9%E4%BD%A0%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B-mockito-%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E6%A1%86%E6%9E%B6/

你可能感兴趣的:(互联网,面经总结,单元测试,java,编程语言,spring,python)