简而言之,关于TDD中的模拟过程可以说什么

时间:2010-04-29 20:39:28

标签: unit-testing tdd mocking automated-tests integration-testing

我想刷脑来避免混淆。简而言之,关于TDD模拟过程可以说什么

  1. MOCKING 背后的 GREAT 理念是什么?
  2. 模拟框架仅用于避免在测试期间访问数据库,或者可用于其他内容吗?
  3. 对于新来者(像我一样),所有框架都是相同的,还是我需要为此选择一个?

3 个答案:

答案 0 :(得分:4)

  1. GREAT 理念:限制您的测试范围。通过删除依赖项,可以消除由于依赖性而导致测试失败的风险。这样,您可以专注于使用这些依赖项的代码的正确性。
  2. 模拟数据库很常见但您可以使用接口模拟任何依赖项。例如,在最近的一个项目中,我们模拟了一个Web服务。您甚至可能想要模拟另一个业务对象,以确保您不依赖于该对象中逻辑的正确性。
  3. 我会选择最容易使用的。 Moq非常好。

答案 1 :(得分:4)

我建议你从这里开始:

  

Mocks are not Stubs

这篇文章可能让我想到了关于模拟的正确方法。当然,模拟的对象通常很重(否则它可能不值得嘲笑)但是它在某种意义上并不一定非常重,因为它强烈依赖于像数据库这样的外部系统。它可能只是一个复杂的部分,您需要隔离以有效地仅测试您的类,而不是依赖。

答案 2 :(得分:4)

除了从正在测试的单元中消除数据库和其他缓慢或辅助问题之外,模拟还允许您开始为类编写测试而无需实现任何协作类。

当你设计一些功能时,你会意识到你需要一些其他的类或服务,以便坚持单一的责任原则,但是你必须实现那些以使第一个工作,这反过来将证明还需要更多的课程。

如果您可以模拟或存根这些依赖项,那么您可以创建第一个类将依赖的接口,而不必实际在该类之外实现任何内容 - 只需从接口的存根返回预设结果。

这是测试优先方法的重要组成部分。