【问题标题】:Junit and EasyMock understanding clarificationsJunit 和 EasyMock 的理解说明
【发布时间】:2010-04-22 04:45:43
【问题描述】:

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

EasyMock 与 Junit 相比有哪些优势?

哪个更容易配置?

EasyMock 有什么限制吗?

请帮我学习

【问题讨论】:

    标签: java unit-testing junit mocking easymock


    【解决方案1】:

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

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

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

    • 测试NG
    • jtest
    • jBehave(有点)
    • jDave(有点)

    其他语言等价物包括:

    • PHP - phpUnit
    • Ruby - 测试::单元
    • Flash - FlexUnit

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

    • EasyMock
    • jMock
    • jMockIt

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

    • 录制回放 - EasyMock
    • 期望 - jMock、jMockIt

    我个人是 Expectations 方法的粉丝,它更具声明性,更不容易出错,因为它需要实现者调用的方法更少,但这是一种风格偏好,而不是技术偏好。

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

    【讨论】:

      【解决方案2】:

      它们不是一回事

      JUnit 是一个xUnit 测试框架 - 它有一个测试运行程序,可以循环您的测试套件,执行每个自动化单元测试并记录结果。

      EasyMock 是mock-object framework。它用于用假人/假货/模拟物替换难以设置的协作者,以帮助专注于我打算测试的行为。
      例如如果我的 SUT.AuditCustomers() 调用 DAO.GetCustomer(databasePath),在我的测试中我想专注于方法 AuditCustomers(),所以我会使用一个 mockDAO,它不会从数据库中读取客户,而是返回已知/硬编码客户对象以方便测试。这还有一个好处是 GetCustomer 中的任何错误都不会通过 AuditCustomers() 的测试

      【讨论】:

        【解决方案3】:

        我不确定,但我认为 JUnit 和 EasyMock 应该协同工作,而不是相互排斥。 JUnit 的想法是测试给定的方法,因此您希望将其他类的虚拟实例注入其中,以确保 JUnit 测试完全不依赖于其他类方法。在 JUnit 中提供模拟对象的目的是由 EasyMock 和其他类似的模拟对象创建者提供的。在使用 spring 将 dummy 实现注入 JUnit 时使用了类似的想法。

        EasyMock 似乎很有希望,但您应该评估 Spring 或其他一些代理对象生成器是否适合您的场景。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多