java - Cactus 与模拟对象(jMock,Easy mock)

标签 java jakarta-ee easymock jmock cactus

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

谁能回答以下问题?

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

最佳答案

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

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

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

您使用哪一个在很大程度上取决于您要通过测试完成的目标。如果你想做更多的 TDD,模拟方法是可行的方法。您进行单独的原型(prototype)设计以查看您是否足够了解容器的工作原理以编写代码,然后进行单元测试,然后进行集成测试/验收测试以确保一切正常。

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

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

关于java - Cactus 与模拟对象(jMock,Easy mock),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2631062/

相关文章:

java - 如何在 session Bean (EJB) 中获取请求参数?

testing - 简单模拟 - 如何?

java - 如何测试 protected 方法

java - 如何将 libgdx int keycode 转换为 char?

java - 我需要打印出特定 url 地址的段落中每个单词的使用次数

java - Libgdx body 位置和 shaperrenderer 位置不一样

jakarta-ee - 当容器管理的 tx EJB 提交时,如何捕获和包装 JTA 抛出的异常?

spring - 如何解决 Jsf :Property 'not found" on type with root cause?

testing - 没有运行后端的 Spring-WS 2.0 单元测试

java - 带有 Log4j2 的 Weblogic 12c 在停止/启动后停止记录