Java 中顶级的模拟测试框架

了解一些流行的并且被广泛使用的 Java 单元测试框架,它们用于模拟测试依赖项和验证测试结果。

在本 Java 教程中,我们将介绍一些流行的并且被广泛使用的 Java 测试框架,它们用于模拟测试依赖项和验证结果。

1. Mockito

Mockito 是一个开源框架,允许我们轻松创建测试双胞胎 (mock)。测试双胞胎是一个通用术语,用于在测试目的上替换生产对象的情况。

在 mockito 中,我们通常使用以下类型的测试双胞胎。

  • Stubs (桩) – 是一个对象,具有在测试期间方法执行的预定义返回值。
  • Spies (间谍) – 与桩类似的对象,但它们还会记录它们是如何被执行的。
  • Mocks (模拟) – 是具有在测试期间方法执行的返回值,并且已经记录了这些执行的期望的对象。如果模拟接收到未预期的调用,它们可能会抛出异常,并且会在验证期间进行检查以确保它们收到了所有预期的调用。

我们可以在测试类中模拟接口和类。Mockito 还通过使用 mockito 注释来生成最少的样板代码。

2. EasyMock

EasyMock 框架使用java.lang.reflect.Proxy 对象创建模拟对象。当我们创建模拟对象时,在测试执行期间,代理对象取代了真实对象。代理对象从我们传递给模拟创建的接口或类获取其字段和方法。

使用 EasyMock 的典型测试有四个阶段

  • 创建模拟 (Mocks) – 我们想要将行为委托给代理对象。通常,我们模拟与外部系统交互的类或不应该成为测试代码一部分的类。
  • 记录 – 来自模拟对象的期望。这些期望包括使用某些参数模拟方法、被调用方法的返回值以及方法应该被调用的次数。
  • 回放 (Replay) – 使模拟对象可用。在“回放”模式下,当测试调用记录的方法时,模拟将返回先前步骤中记录的结果。
  • 验证 (Verify) – 所有期望都按记录执行,并且没有对模拟执行意外的调用。

3. WireMock

微服务架构允许我们独立开发、测试和部署应用程序的不同组件。虽然可以独立开发这样一个组件,但将其隔离地测试可能具有挑战性。为了对微服务进行真正的集成测试,我们必须测试其与其他 API 的交互。

WireMock 帮助我们在集成测试中模拟外部 API,以便测试依赖于这些外部 API 来完成事务的特定 API。 WireMock 是一种流行的 HTTP 模拟服务器,可用于模拟 API 和存根 HTTP 响应。

4. MockWebServer

MockWebServer 是一个有用的库,用于模拟当前组件(正在测试)所依赖的 API。这种模拟 API 在微服务架构中非常有用,因为我们同时正在开发多个依赖的服务。

MockWebServer 在某种程度上类似于 WireMock,可用于测试从 Spring WebClient 发出的异步 HTTP 调用。

5. JMockit

JMockit 是一个开源软件,包含对模拟、虚假和集成测试的支持,以及代码覆盖率工具。它用于模拟测试边界之外的外部依赖项,类似于 Mockito

JMockit 最重要的特性是它允许我们模拟任何内容,甚至其他库难以模拟的内容,例如 private 方法、构造函数staticfinal 方法。它甚至允许模拟 成员字段初始化块

与 EasyMock 类似,JMockit 也使用 Record-Replay-Verify 模型进行测试,但允许以一种更详细和声明性的方式定义期望和验证。

6. PowerMock

PowerMock 扩展了现有的模拟框架,例如 EasyMockMockito,为其添加了更强大的功能。PowerMock 使我们能够编写针对最难以测试的代码的良好单元测试。

例如,Java 中的大多数模拟框架都无法模拟 static 方法或 final 类。但是使用 PowerMock,我们可以模拟几乎任何类。

PowerMock 当前扩展了 EasyMockMockito 模拟框架。根据首选的扩展,编写任何单元测试的语法略有不同。

祝您学习愉快!!

Github 上的源代码

评论

订阅
通知
0 条评论
最多投票
最新 最旧
内联反馈
查看所有评论

关于我们

HowToDoInJava 提供 Java 和相关技术的教程和操作指南。

它还分享最佳实践、算法和解决方案以及经常被问到的面试题。

我们的博客

REST API 教程

关注我们