首页 > 解决方案 > 在集成测试中进行模拟是否被认为是一种好习惯?

问题描述

有人告诉我@Mock 通常只用于单元测试,但我认为它对于替换测试类之外的外部部分很有用。在集成测试中模拟是否正确?

标签: javaspringmockingmockito

解决方案


最后,这都是关于措辞的。

当您从最基本的意义上考虑“正确”时,例如正确性,那么答案很简单:不。

您会看到,集成测试的目标是确保您的集成系统(由多个不同的组件组成)按预期运行。集成测试的目的是验证您的组件“管道”是否按预期工作。因此:当系统的某些部分被模拟出来时,您无法验证您的系统是否正常工作。

但是,您可以不那么严格地考虑“正确性”。

示例:销售汽车的公司必须测试ECU。基本上是一个硬件,运行一个潜在的巨大软件堆栈。这些 ECU 通常在汽车内运行。所以当你想对一个ECU进行集成测试时,你必须把ECU放到汽车中进行测试,对吧?一辆可能还不存在的汽车。这里的解决方案:有硬件模拟器。您将 ECU 插入该仿真器,然后 ECU 会“思考”位于真车内的内容。

所以:有很好的论据声称“真正的集成测试不能使用模拟”,但与此同时,在现实世界中,这种“模拟”一直在发生。

因此,真正的答案是:这取决于上下文。因此,没有一个普遍的答案。相反,这是关于沟通。您“简单地”必须确保您的组/组织中的所有人都对这些术语有相同的理解。

该术语本身可以以不同的方式解释。您(共同!)选择最适合您需求的定义,然后确保所有为您的项目做出贡献的人都共享该视图(或至少知道它)。


推荐阅读