【问题标题】:EasyMock - do you have to reset() mocks after test?EasyMock - 你必须在测试后重置()模拟吗?
【发布时间】:2013-12-10 16:41:24
【问题描述】:

我认为答案是肯定的,但我无法在 easymock documentation 中找到任何确定的内容。

当第一个测试模拟一个类时,我收到一个错误,然后另一个测试以常规方式使用这个类。该类在第二个测试中被模拟并因意外调用而失败。

除了使用EasyMockSupport 和在@After 方法中调用resetAll() 之外,有没有办法自动清理(最好不必在每个类中重复)?

【问题讨论】:

  • 我使用接口模拟,这对类或测试之间没有影响。

标签: java unit-testing mocking easymock


【解决方案1】:

您似乎不需要手动重置模拟。

在我的例子中,模拟类存储在一个静态变量中,一旦纠正,测试开始运行正常。

如果 EasyMock 报告记录了违反预期的地方,那就太好了 - 这样会更容易找到问题的根源。

【讨论】:

    【解决方案2】:

    “当第一个测试模拟一个类时,我收到一个错误,然后另一个测试以常规方式使用这个类。该类在第二个测试中被模拟并因意外调用而失败。”

    在我看来,以下任何一个都可能是真的:

    1. 您创建了一个已添加到工厂的模拟依赖项,因此它始终返回此模拟依赖项

    2. 您已使用 power mock 为测试准备课程,并且在您的测试之间一直存在这种情况。

    如果其中任何一个是真实的,或者发生了其他事情,我建议您的代码库中的某个地方存在设计缺陷。

    如果出现选项一(例如,在测试返回单例的工厂时可以),那么单个测试类的工作就是确保在完成模拟依赖项后替换它。

    如果出现了选项二,那么也许您实际上想使用@PrepareOnlythisForTest

    最终,您所寻找的东西永远不会被需要。 记住总是负责任地嘲笑。

    【讨论】:

    • 感谢您没有回答我的实际问题。您的回答对于在我第一次看到的 250 多个测试用例中定位问题也完全没有帮助。
    • 所以你的模拟被设置为一个静态变量。这在很多方面与我指出的工厂示例中的模拟依赖项相似。如果我的回答真的对你毫无用处,我很乐意删除它。
    • 好吧,我问了一个关于 EasyMock 的具体问题;你没有提供直接的答案。软件工程辅导是不必要的。一旦我从测试作者那里得到答案,解决方案就变得显而易见了。一个有用的答案是:“您可以执行 X 来查看在哪里创建了破坏您的测试的模拟”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多