嘲笑测试中的所有内容都会导致几个潜在的陷阱,这可能会对您的测试策略的有效性和可靠性产生负面影响。以下是与过度嘲笑相关的一些关键问题:
1。脆性测试和紧密耦合**
当您模拟所有依赖关系时,您的测试将与正在测试的代码的实现细节紧密相结合。这意味着即使外部行为保持不变,即使代码内部工作的较小变化也可能破坏测试。这样的测试是脆弱的,需要频繁的更新,这可能是耗时和令人沮丧的[6] [9]。
2。错误的信心和隐藏错误**
过度嘲笑会导致对代码可靠性的错误信心。通过用模拟隔离组件,您可能会错过只有在所有组件相互作用时才表现出来的现实世界问题。这可能导致在生产中发现错误,而不是在测试过程中发现了错误,从而破坏了测试的目的[1] [9]。
3。过度复杂性和维护挑战**
创建和维护模拟,尤其是对于复杂系统,可能具有挑战性且耗时。随着系统的发展,可能需要经常更新模拟以反映依赖性或行为的变化,这可能会繁琐而容易出现错误[9] [11]。
4。验证现实世界行为的困难**
嘲笑所有内容可能会使在现实世界中的情况下验证系统的行为变得困难。涉及更少模拟的集成测试通常更适合此目的。过度依赖模拟会导致无法准确反映现实世界相互作用的测试[9] [11]。
5。资源效率低下**
过度的嘲笑会导致资源的效率低下。与编写实际的测试逻辑相比,配置模拟可以消耗更多的时间,尤其是在数据库重或复杂的系统中[2] [11]。这种效率低下可以减慢开发过程并增加测试成本。
6。与集成测试重叠**
当单元测试涵盖也通过集成测试而无需模拟测试的方案时,它会提出有关这些单元测试添加的值的问题。集成测试通常提供对系统行为的更全面的覆盖范围,而无需进行广泛的模拟[2] [7]。
7。不正确的模拟行为的潜力**
如果模拟无法准确模仿它们替换的真实对象的行为,那么即使实际系统失败,测试也可能通过。这可能会导致错误的安全感和错过的错误[5] [9]。
总而言之,嘲笑可以是测试中有用的工具,但过度使用它可能会导致脆弱的测试,错误的信心和效率低下。在可能的情况下,明智地使用嘲笑并考虑诸如集成测试之类的替代方案至关重要。
引用:[1] https://cs-syd.eu/posts/2021-10-22-why-mocking-is-a-bad-idea
[2] https://softwareengineering.stackexchange.com/questions/454887/454887/how-to-to-woid-too-too-much-mocking-in-unit-tests-in-tests-in-a-a-a-database-heavy-method
[3] https://ryanclements.dev/posts/you-probase-dont-need-mocking
[4] https://stackoverflow.com/questions/61793083/should-i-i-mock-every-single-depperencies-in-unit-int-unit检测
[5] https://softwareengineering.stackexchange.com/questions/382087/how-exactly-should-nould-unit-tests-bebe-bebe-without-without-without-without-mocking-延伸
[6] https://pytest-with-eric.com/mocking/pytest-common-mocking-problems/
[7] https://www.reddit.com/r/typescript/comments/1ei9f4a/is_it_me_or_or_or_or_or_mocking_everything_everything_everywhere_in/
[8] https://stackoverflow.com/questions/38181/when-should-i-mock
[9] https://www.qodo.ai/blog/mock-testing/
[10] https://hynek.me/articles/what-to-mock-in-5-mins/
[11] https://vinted.engineering/2023/10/02/mocking-framework-downside/