unit-testing - 我什么时候应该 mock ?

标签 unit-testing language-agnostic mocking

我对模拟和假对象有基本的了解,但我不确定我对何时/何地使用模拟有感觉 - 特别是因为它适用于这种情况 here .

最佳答案

单元测试应通过单一方法测试单一代码路径。当一个方法的执行在该方法之外传递到另一个对象中,然后又返回时,你就有了一个依赖。
当您使用实际依赖项测试该代码路径时,您不是在进行单元测试;你是集成测试。虽然这很好且必要,但它不是单元测试。
如果您的依赖项有问题,您的测试可能会以返回误报的方式受到影响。例如,您可能会向依赖项传递一个意外的空值,并且该依赖项可能不会按照文档中的说明抛出空值。您的测试没有遇到应有的空参数异常,并且测试通过。
此外,您可能会发现很难(如果不是不可能的话)可靠地让依赖对象在测试期间准确返回您想要的内容。这还包括在测试中抛出预期的异常。
模拟取代了这种依赖。您设置对依赖对象的调用的期望,设置它应该为您提供的确切返回值以执行您想要的测试,和/或要抛出的异常,以便您可以测试您的异常处理代码。通过这种方式,您可以轻松测试相关单元。
TL;DR:模拟您的单元测试涉及的每个依赖项。

关于unit-testing - 我什么时候应该 mock ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38181/

相关文章:

language-agnostic - 涉及转弯时如何实现航位推算?

java - 我需要在单元测试中模拟 RabbitMQ

python - 属性错误 : __exit__ when I try to mock out build in functions

reactjs - 如何 jest.mock ES6 模块导入?

language-agnostic - 波普勒编程

ruby - Rails Foxy Fixtures 抛出未知列错误

language-agnostic - 什么是 "production-level code"?

unit-testing - Mocks 是如何使用的?

ios - 测试因 faSTLane 错误而失败

c# - 测试因 ShimNotSupportedException 而失败