java - Junit 和 EasyMock 理解澄清

标签 java unit-testing junit mocking easymock

现在我仍在使用 JUnit,我遇到了 EasyMock,我知道两者都是出于相同的目的。 我的理解正确吗?

EasyMock相对于Junit有什么优势?

哪一个更容易配置?

EasyMock 有什么限制吗?

请帮助我学习

最佳答案

当我解释单元测试时,我喜欢将它们描述为阶段列表:

  • 测试设置:定义并创建测试所需的所有数据和对象
  • 期望:说出您期望在测试期间执行哪些方法和参数
  • 测试:您要测试的实际行为/方法调用
  • 断言:确保测试结果成功的声明
  • 测试拆除:销毁测试期间发生的任何副作用

jUnit 是一个单元测试框架,提供除期望阶段之外的所有测试。 Java 领域的替代方案包括:

  • 测试NG
  • jtest
  • jBehave(某种程度上)
  • jDave(某种程度上)

其他语言等效项包括:

  • PHP - phpUnit
  • Ruby - 测试::单元
  • 闪存 - FlexUnit

模拟的概念增加了期望的新阶段,并且由于 jUnit 在模拟运动之前看到了它的大部分主要发展,因此这些功能没有合并到核心中,并且有一组工具来填补这一空白java空间已经开放。这些库包括

  • EasyMock
  • jMock
  • jMockIt

所有这些库都是对我列出的任何上述单元测试框架的补充,包括 jUnit。它们添加了定义模拟对象的能力。模拟对象获得分配给它们的“期望”,然后在断言阶段对其进行断言。每个模拟库的实现方式略有不同,但主要模型是

  • 记录重播 - EasyMock
  • 期望 - jMock、jMockIt

我个人很喜欢期望方法,这种方法更具声明性,并且不易出错,因为它需要实现者调用更少的方法,但这是一种风格偏好,而不是技术偏好。

其他语言(因为它们比 java 晚进入单元测试世界)大多数情况下没有这种分离。单元测试库和模拟库是一回事。 phpunit、rspec 中就是这种情况。我想 jUnit 不会很快将其本地化,因为已经有如此丰富的替代模拟库可用。

关于java - Junit 和 EasyMock 理解澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2688304/

相关文章:

java - 二叉节点树,错误的父子

java - 一般如何测试非 RxJava 可观察对象或异步代码?

angularjs - 使用 $validators 单元测试 Angular 表单验证

java - 为什么cucumber在所有胶水代码文件中运行@Before

java - 编译时错误: package javax. servlet不存在导入javax.servlet.*

java - 创建用于创建并连接到 Android Sqlite3 数据库的 java jar 文件

java - 是否可以获取具有 WebElement 的 By 对象

reactjs - 测试 withRouter 中包含的 react 组件(最好使用 jest/enzyme)

java - 使用 JUnit 进行容器内测试

java - JUnit:我可以保留 spring 上下文的公共(public)部分吗?