【问题标题】:Is it wise to use mocking in BDD test cases?在 BDD 测试用例中使用模拟是否明智?
【发布时间】:2022-04-23 01:28:17
【问题描述】:

我们将使用 BDD 实现一个小型 Java 应用程序,它使用 apache.org 的 POI 读取 MS excel 表,并将基于该 excel 的一些文本打印到 STDOUT。我们一致认为最简单的解决方案是为每个 BDD 测试用例创建一个 test.xls。

还有另一个想法,那就是我们应该模拟 POI 库调用和测试期望。这个想法背后的原因是我们不想测试 POI,并浪费测试时间在每个测试用例中使用它。此外,在不同的操作系统上文件访问可能会很棘手。

在这种情况下使用模拟是否明智?

【问题讨论】:

    标签: java mocking bdd xls apache-poi


    【解决方案1】:

    定义模拟和不模拟的限制绝对是灰色的,但是我认为有两个关于模拟的一般性陈述可以提供指导:

    1. Mock only interfaces that you own
    2. Mocks are not stubs

    因此,虽然有时您想模拟一个子系统,因为它很慢,但正确的模拟是将这个缓慢的系统识别为需要架构分离的东西,因此您将开发正确表示您与该缓慢系统的交互的接口,并且嘲笑那里的行为。然后,您将进行另一类测试,测试那些与慢速资源实际交互的接口的实现,以确保该代码正常工作。

    就这如何应用于 POI 而言,模拟 POI 的抽象可能有也可能没有很好的理由。这取决于项目的范围。对我来说,如果我觉得项目可能需要一个不同的电子表格解决方案,我会这样做。

    我当然不会模拟实际的 POI 类,因为上面的第一个链接非常清楚地说明了这种方法会带来多少痛苦。

    【讨论】:

    • 谢谢@Yishai,很有帮助
    【解决方案2】:

    我从来都不是嘲笑的忠实粉丝,但在某些情况下它确实有意义。

    我认为 Apache POI 足够稳定,您可以正确地将其排除。要问的重要问题是您是否正在测试与 POI 的交互?如果你是,那么你不能嘲笑它。

    既然你说你不测试与 POI 的交互,那就继续吧。

    【讨论】:

    • 我做了一些spikes,看来我要写很多期望,所以我先去POI的真正实现
    猜你喜欢
    • 2015-02-21
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    相关资源
    最近更新 更多