【问题标题】:In few words, what can be said about Mocking process in TDD简而言之,关于 TDD 中的 Mocking 过程可以说些什么
【发布时间】:2010-04-29 20:39:28
【问题描述】:
我想刷一下我的大脑以避免混淆。简而言之,关于 TDD 中的 Mocking 过程可以说些什么
-
MOCKING 背后的伟大 想法是什么?
- 模拟框架仅用于避免在测试期间访问数据库,或者它们可用于其他用途?
- 对于新来的人(比如我),所有框架是否都相同,或者我需要出于这个或那个原因选择一个?
【问题讨论】:
标签:
unit-testing
tdd
mocking
automated-tests
integration-testing
【解决方案1】:
除了从被测试的单元中消除数据库和其他缓慢或辅助问题之外,模拟允许您开始为类编写测试,而无需实现任何协作类。
当你设计一些功能时,你会意识到你需要一些其他的类或服务,以坚持单一职责原则,但是你必须实现它们才能让第一个工作,这反过来将证明需要更多的课程。
如果您可以模拟或存根这些依赖项,那么您可以创建第一个类所依赖的接口,而无需实际实现该类之外的任何内容 - 只需从接口的存根返回预设结果。
这是测试优先方法的重要组成部分。
【解决方案2】:
-
伟大的想法:限制测试范围。通过删除依赖关系,您可以消除由于依赖关系而导致测试失败的风险。这样您就可以专注于使用这些依赖项的代码的正确性。
- 模拟 DB 很常见,但您可以使用接口模拟任何依赖项。例如,在最近的一个项目中,我们模拟了一个 Web 服务。您甚至可能想模拟另一个业务对象,以确保您不依赖该对象中逻辑的正确性。
- 我会选择最容易使用的那个。起订量真的很好。
【解决方案3】:
我建议你从这里开始:
Mocks are not Stubs
可能是这篇文章让我对 Mocks 有了正确的认识。当然,被模拟的对象通常很重(否则它可能不值得模拟),但它不必很重,因为它对数据库等外部系统有很强的依赖。它可能只是一个复杂的部分,您需要将其隔离以有效地仅测试您的类而不是依赖项。