Mocks 和 stubs 都是 TestDouble 的类型,负责模仿测试中的依赖对象。
但两者之间存在着显著的差异,正确认识这些差异并恰当地使用它们非常重要。
模拟用于验证依赖对象如何调用方法以及结果是什么,而存根仅定义依赖对象的方法应返回的结果。
模拟用于跟踪方法调用并确保使用正确的参数调用正确的方法。
另一方面,存根并不关心方法调用本身,而是始终返回定义的结果。
如果您不了解这种差异,您 阿尔巴尼亚区号 的测试很可能会无法正常工作或测试错误的东西。
例如,如果你想知道一个依赖对象是如何被调用的,那么你应该使用模拟。
另一方面,如果被测代码期望特定的结果,则适合配置存根来返回该结果。
这最大限度地减少了依赖对象的影响,并允许您更准确地验证被测代码的行为。
Mock 和 Stub 之间的差异:角色差异
Mocks 和 stubs 都是用来模拟依赖对象的 TestDoubles,但是它们的作用有明显的区别。
测试期间使用模拟来验证是否使用正确的参数调用某些方法。
模拟的主要目的是跟踪依赖对象的使用方式并验证方法调用是否按预期发生。
因此,模拟非常适合结合“期望”和“验证”的测试方法,并且在检查 API 调用、数据库连接等是否正确时非常有效。
存根用于返回依赖对象的方法的预定义结果。
存根的主要用途是当被测试的代码依赖于特定的依赖关系,但其行为不是测试的重点时。
例如,如果某个方法需要来自外部 API 的响应,则可以使用存根返回固定的预定义响应而不是调用实际的 API 来对其进行测试。
这消除了对外部资源的依赖,并提高了测试的速度和稳定性。
模拟和存根:具体情况具体分析
要决定何时使用模拟或存根,重要的是了解每种模拟的特点并确定何时适合使用它们。
模拟非常适合验证某些依赖项是否被正确使用。
例如,在测试 API、数据库连接或与外部系统的交互时,您可以使用模拟来验证是否使用正确的参数调用了正确的方法。
这使您可以验证您的代码是否正在执行您期望的操作。
当您想要验证所测试代码的逻辑,但对依赖对象本身的行为不感兴趣时,存根很有用。
例如,如果您不需要检 此时间段内出现了更新报告 查来自外部 API 的响应,但想要检查如果返回特定响应下一步将是什么,则可以使用存根来返回固定响应。
这使您可以专注于被测试代码的内部逻辑,并且无需依赖外部资源即可执行测试。
如何在实际单元测试中结合使用模拟和存根
单元测试通常使用模拟和存根的组合。
例如,如果您正在测试对依赖对象进行特定方法调用并在继续之前接收结果的代码,则可以使用模拟来确保方法调用成功,并使用存根来模拟该方法的结果。
这样,通过结合模拟和存根,您可以验证正在测试的代码是否正常工作。
举一个具体的例子,如果您有代码可以进行 API 调用,然后根据响应执行某些处理,那么您可以使用模拟来确保 API 到达正确的端点,并使用存根来设置 API 应该返回的数据。
此方法允许您验证被测代码是否正确访问 API 并处理正确的数据。
同时使用模拟和存根可以让你 在短信中 完全模拟依赖对象的行为,同时深入了解被测代码的行为。