Mockito vs. EasyMock

2024 年 8 月 29 日 | 阅读 2 分钟

Mockito 是一个开源的、基于 Java 的模拟框架,用于单元测试。 Mockito 框架是在 MIT(麻省理工学院)许可证下发布的。 它允许在自动化单元测试中创建模拟对象,用于测试驱动开发 (TDD) 或行为驱动开发 (BDD)。 它与其他测试框架(如 TestNG 和 JUnit)一起使用。

EasyMock 是一个开源的、基于 Java 的测试框架,用于测试 Java 应用程序。 EasyMock 框架是在 Apache 许可证下发布的。 它允许通过使用 Java 反射来创建给定接口的模拟对象。 与 Mockito 和 EasyMock 一样,它也与其他测试框架(如 TestNG 和 JUnit)结合使用。

  • Stubs: Stubs 是保存预定义数据的对象。 它充当被调用模块的临时对象,并提供与原始软件相同的输出。
  • Mocks: Mocks 是克隆或虚拟对象,它们模拟真实对象的行为。
  • Spies: Spies 是真实对象的局部模拟对象。

另一方面,EasyMock 是一个开源的、基于 Java 的测试框架,用于测试 Java 应用程序。 与 Mockito 一样,EasyMock 可以模拟类和接口。 它允许使用 Java Reflection API 动态(在运行时)创建给定接口的模拟对象。 EasyMock 框架是在 Apache 许可证下发布的。

我们不能使用 EasyMock 模拟 final 和私有方法。 此外,它为 toString()、hashCode()、equal() 和 finalize() 方法提供内置行为。 与 Mockito 一样,EasyMock 也可以与其他测试框架(如 TestNG 和 JUnit)结合使用。

以下是 Mockito 和 EasyMock 之间的一些重要区别

参数MockitoEasyMock
许可Mockito 框架是在 MIT(麻省理工学院)许可证下发布的。EasyMock 框架是在 Apache 许可证下发布的。
支持测试 spiesMockito 支持 mocks 和 spies。 Spies 和 mocks 执行不同的功能。 Spy 创建一个局部模拟对象,而 mock 创建真实对象的虚拟/伪造(完全模拟)对象。而 EasyMock 仅支持 mocks。 它不支持 spies。
模拟方法调用在 Mockito 中,我们使用 Mockito.when(mock.method(args)).thenReturn(value) 方法来模拟方法调用。在 EasyMock 中,使用 EasyMock.expect(mock.method(args)).andReturn(Value) 方法来模拟方法调用。
验证调用在 Mockito 中,Mockito.verify(mock).method(args) 用于验证对 mock 的调用。在 EasyMock 中,EasyMock.verify(mock) 用于验证对 mock 的调用,但此方法始终在调用 EasyMock.replay(mock) 方法后使用。
抛出异常在 Mockito 中,在调用 Mockito.when(mock.method(args)) 方法后,可以使用 .thenThrow(ExceptionClass.class) 模拟抛出异常。在 EasyMock 中,在调用 EasyMock.expect(..) 方法后,可以使用 .andThrow(new ExceptionClass()) 模拟抛出异常。

Mockito 是用于测试 Java 应用程序的最流行的模拟框架。 它比任何其他测试和模拟框架(如 EasyMock)更好。


下一个主题Mock vs Stub vs Spy