【问题标题】:Cactus versus mock objects (jMock, Easy mock)仙人掌与模拟对象(jMock,Easy mock)
【发布时间】:2010-04-13 15:55:39
【问题描述】:

我对 Cactus 和模拟对象(jMock,Easy mock)有点困惑。

有人可以回答以下问题吗?

  1. 何时使用 Cactus 进行测试?
  2. 什么时候不使用 Cactus 进行测试?
  3. 何时使用模拟对象进行测试?
  4. 什么时候不使用模拟对象进行测试?

【问题讨论】:

    标签: java jakarta-ee easymock jmock cactus


    【解决方案1】:

    嗯,这个问题没有非常客观的答案,但是模拟对象是关于测试代码的行为,但不能告诉你是否正确地与容器交互。

    Cactus 在容器中运行您的代码,因此它实际上更像是一个集成测试,但它告诉您的是您的代码实际上与容器正确交互(它发送的是合法的,它返回的是真实的) .

    总而言之,Mock 告诉你,如果你想要行为 x,你就会得到行为 x。 Cactus 告诉你行为 x 实际上在容器中得到了预期的结果。

    您使用哪一个在很大程度上取决于您要通过测试完成什么。如果你想做更多的 TDD,mock 方法是要走的路。您进行单独的原型设计,看看您是否足够了解容器如何编写代码,然后进行单元测试,然后进行集成测试/验收测试以确保一切正常。

    但是,如果您尝试进行更传统的单元测试,在代码中使用不同的值尝试测试边缘情况和行为,那么使用模拟不会告诉您太多,因为一个大您的容器的一部分丢失了。

    我目前更喜欢 Mock 方法,但是如果我要回到 Cactus 中,我会更多地测试容器的不变量,这样如果我们升级容器,我们就会知道容器的工作方式没有任何重要的改变应该会影响我们的代码。

    【讨论】:

      【解决方案2】:

      何时使用 Cactus 进行测试?

      用于集成测试(涉及容器的交互)。那是或曾经是仙人掌的最佳位置。这些测试通常是粗粒度的……而且它们的执行速度不是很快。

      什么时候不使用 Cactus 进行测试?

      对于集成测试以外的其他测试(甚至对于集成测试,我已经有一段时间没有看到 Cactus 测试了)。

      何时使用模拟对象进行测试?

      当您想要对依赖事物独立进行单元测试时。这些测试通常是细粒度的,并且执行速度很快。

      什么时候不使用模拟对象进行测试?

      当您想编写集成测试(即测试交互)、功能测试等时。

      仙人掌网站上的Mock Objects vs In-Container testing 页面很好地总结了这一点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-16
        相关资源
        最近更新 更多