代码之家  ›  专栏  ›  技术社区  ›  Isabel Jinson

仙人掌对模拟对象(jmock,简单模拟)

  •  3
  • Isabel Jinson  · 技术社区  · 15 年前

    我有点困惑仙人掌和模拟对象(jmock,轻松模拟)。

    有人能回答下列问题吗?

    1. 什么时候用仙人掌做测试?
    2. 什么时候不用仙人掌做测试?
    3. 何时使用模拟对象进行测试?
    4. 何时不使用模拟对象进行测试?
    2 回复  |  直到 15 年前
        1
  •  4
  •   Yishai    15 年前

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

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

    总而言之,一个模拟告诉你,如果你想要行为X,你得到了行为X。仙人掌告诉你,行为X在容器中得到了一个预期的结果。

    你使用哪一个很大程度上取决于你想用你的测试完成什么。如果你想做更多的TDD,模拟方法是可行的。你做单独的原型设计,看看你是否足够了解容器是如何工作来编写代码的,然后你做单元测试,然后你做集成测试/验收测试来确保所有的工作都正常。

    但是,如果您尝试进行更传统的单元测试,即使用不同的值来测试边缘情况和行为,那么使用mocks进行测试不会告诉您很多,因为容器的很大一部分丢失了。

    我现在更喜欢模拟的方法,但是如果我回到仙人掌中,测试容器的不变量会更好,这样如果我们升级容器,我们就知道容器的工作方式没有任何重要的变化,这些变化会影响我们的代码。

        2
  •  3
  •   Pascal Thivent    15 年前

    什么时候用仙人掌做测试?

    用于集成测试(涉及交互 具有 容器)。那是或曾经是仙人掌的最佳去处。这些测试通常是粗粒度的…他们的执行速度不太快。

    什么时候不用仙人掌做测试?

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

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

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

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

    当您想要编写集成测试(即 测试相互作用 )功能测试等。

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