需要帮助来区分模拟和测试驱动程序

时间:2019-05-22 09:50:47

标签: unit-testing testing mocking integration-testing

我至少可以说困惑。我可能会把Mocks弄错,Test Drivers弄错了,或者两者都错了。

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

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

对我来说,使测试驱动程序听起来像一种模拟,但模拟特别是一种单元测试吗?

两者之间有什么区别?

1 个答案:

答案 0 :(得分:1)

我通过以下方式了解它:

模拟:

您有标准的分层应用程序,例如控制器->服务->存储库。您要对其进行单元测试。因此,您正在使用模拟并将Repository Mock注入Service,从而可以隔离Service测试。

测试驱动程序:

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

同一示例适用于其他服务客户端,例如您想通过HTTP获得某些信息,而不是调用真实服务,而是启动MOCK SERVER,例如Wiremock。

  

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

     

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

回顾:

内存对象很小,它们的配置非常简单,它们在单元测试中用于隔离类。

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