【问题标题】:Need help differentiating between mocks and test drivers需要帮助区分模拟和测试驱动程序
【发布时间】:2019-05-22 09:50:47
【问题描述】:

至少可以说我很困惑。我可能弄错了 Mocks,测试驱动程序错了,或者两者兼而有之。

我对 Mocks 的理解是,它是一种模仿单位的方式,以避免在测试时依赖于系统的特定部分。

我对测试驱动程序的理解是,它专门用于自下而上的集成测试,模仿尚未实现的高级模块。

在我看来,这让测试驱动程序听起来像是一种 Mock,但 Mocks 是否专门用于单元测试?

两者有什么区别?

【问题讨论】:

    标签: unit-testing testing mocking integration-testing


    【解决方案1】:

    我是这样理解的:

    模拟:

    您有标准的分层应用程序,例如控制器->服务->存储库。你想对它进行单元测试。因此,您正在使用 mock 并将 Repository Mock 注入到 Service 中,这样您就可以隔离 Service 测试。

    测试驱动:

    您有相同的应用程序,Controller->Service->Repository。你做了所有的单元测试,现在你想测试存储库级别。在存储库测试期间使用 Mocks 没有多大意义,因为它们不会显示您的 sql 查询是否正确。所以是时候进行集成测试了。此外,您不想测试整个系统(可能包含 100 个服务),您想隔离您的应用程序,因此您正在启动,比如说,带有数据库(或嵌入式数据库,如 h2)的 docker 容器并运行您的对此数据库的查询仅用于测试。

    同样的例子也适用于其他服务客户端,例如你想通过 HTTP 得到一些东西,而不是调用真正的服务,你启动 MOCK SERVER,例如线模。

    驱动程序是充当调用模块的临时替代品并提供与实际产品相同的输出的模块。

    当软件需要与外部系统交互并且通常比存根复杂时,也会使用驱动程序。

    回顾一下:

    Mocks 是内存中的小对象,具有非常简单的配置,并且在单元测试期间用于隔离类。

    测试驱动程序更复杂,它们在集成测试期间用于将组件替换到您的基础架构中以隔离整个应用程序。

    【讨论】:

    • 谢谢,这对我来说很有意义。很高兴听到我最初的想法并没有完全偏离。感谢您的详细说明。
    猜你喜欢
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多