mock测试_概念1

一、Mock定义

  Mock 是指使用各种技术手段模拟出各种需要的资源以供测试使用。 被 Mock 的资源通常有以下特征:

  • 被测目标依赖该资源。
  • 该资源可能因为各种原因不稳定、返回结果不断变化或者并不总是能够获取到。
  • 该资源跟被测目标本身质量无关。
  • 这些资源可能是一个外部或底层接口、一个系统、一组数据对象或者是一整套目标软件的工作环境等。通过 Mock 避免对外部真实资源的依赖实现对被测目标的孤立测试,从而大大降低测试的难度,节约测试成本。
  • 需要注意的是利用 Mock 通过的测试与使用真实环境通过的测试毕竟还是有一定差别的。有些时候我们就是需要所测试的系统能够处理依赖所产生的各种情况,包括正常情况和异常情况,我们同样不能保证我们的 Mock 可以模拟到每种这样的情况。因此只在确实有必要的情况下才运用 Mock 。

  在具体的测试过程中,我们经常会碰到需要模拟数据或者接口的情况,因为环境问题或者系统复杂度的问题,我们需要使用 Mock 方式进行数据的模拟。

  mock 测试就是在测试过程中,创建一个假的对象,避免你为了测试一个方法,却要自行构建整个 bean 的依赖链。

  像是以下这张图,类 A 需要调用类 B 和类 C,而类 B 和类 C 又需要调用其他类如 D、E、F 等,假设类 D 是一个外部服务,那就会很难测,因为你的返回结果会直接的受外部服务影响,导致你的单元测试可能今天会过、但明天就过不了了

  

  而当我们引入 mock 测试时,就可以创建一个假的对象,替换掉真实的 bean B 和 C,这样在调用B、C的方法时,实际上就会去调用这个假的 mock 对象的方法,而我们就可以自己设定这个 mock 对象的参数和期望结果,让我们可以专注在测试当前的类 A,而不会受到其他的外部服务影响,这样测试效率就能提高很多

  

二、Mock分类

  目前主要应用两大类 Mock 的场景。

  • 一种是 Mock 一个对象,写入一些预期的值,通过它进行自己想要的测试。主要适用于单元测试,哪种语言开发的程序必须用基于哪种语言的 Mock 方案去实现。

    例如:Mockito 只能针对 Java ,适用范围:单测

  • 另外一种就是 Mock 一个 Server ,构造一个假的服务返回预期的结果,也是为了进行自己的测试。主要适用于接口&性能测试,Mock 方案和程序使用的语言无关,可以用 Java 实现,也可以用 Python 实现等。

    例如:搭建一个 Mock Server,适用范围:无限制

  这两个场景构造了大部分的 Mock 使用范围。

 

posted on 2025-05-27 01:02  花溪月影  阅读(55)  评论(0)    收藏  举报