java - 在集成测试中进行模拟是否被认为是一种好习惯?
问题描述
有人告诉我@Mock 通常只用于单元测试,但我认为它对于替换测试类之外的外部部分很有用。在集成测试中模拟是否正确?
解决方案
最后,这都是关于措辞的。
当您从最基本的意义上考虑“正确”时,例如正确性,那么答案很简单:不。
您会看到,集成测试的目标是确保您的集成系统(由多个不同的组件组成)按预期运行。集成测试的目的是验证您的组件“管道”是否按预期工作。因此:当系统的某些部分被模拟出来时,您无法验证您的系统是否正常工作。
但是,您可以不那么严格地考虑“正确性”。
示例:销售汽车的公司必须测试ECU。基本上是一个硬件,运行一个潜在的巨大软件堆栈。这些 ECU 通常在汽车内运行。所以当你想对一个ECU进行集成测试时,你必须把ECU放到汽车中进行测试,对吧?一辆可能还不存在的汽车。这里的解决方案:有硬件模拟器。您将 ECU 插入该仿真器,然后 ECU 会“思考”位于真车内的内容。
所以:有很好的论据声称“真正的集成测试不能使用模拟”,但与此同时,在现实世界中,这种“模拟”一直在发生。
因此,真正的答案是:这取决于上下文。因此,没有一个普遍的答案。相反,这是关于沟通。您“简单地”必须确保您的组/组织中的所有人都对这些术语有相同的理解。
该术语本身可以以不同的方式解释。您(共同!)选择最适合您需求的定义,然后确保所有为您的项目做出贡献的人都共享该视图(或至少知道它)。
推荐阅读
- javascript - 在 WEB Crypto API 中验证 pycryptodome 创建的数字签名
- amazon-web-services - AWS Lambda 超时太快?
- r - 在列可能不同的数据帧的每一行上使用 purrr::pmap
- android - 在“分阶段推出”期间,未安装我的应用的用户会在 Google Play 商店中看到什么?
- python - 如何仅使用 numpy 和 PIL 检测图像翻译
- c# - 如何像在 JavaScript 中一样在 C# 中创建警告窗口消息框
- d3.js - 什么是“.tickCenterLabel(true);”的等价物 在 D3 版本 3 中?
- debugging - 在 make 函数中使用 eval
- angular - ag-grid:在列值上创建过滤器下拉列表?
- c - 可执行文件中的符号不优先于库中的符号