3

当使用旧的 Rhino Mocks 记录重播语法时,会创建一个 MockRepository 实例并从那里进行所有模拟。在单元测试结束时,调用方法 [MockRepository Instance].VerifyAll() 来验证所有模拟。

使用当前的 AAA 语法,所有模拟都是由 MockRepository 类上的静态方法创建的。目前我没有找到比在测试结束或拆除时验证每个模拟对象更好的解决方案。这比旧语法的行为更容易出错,因为有时忘记验证新的模拟实例。

你们如何处理这个问题,有没有更好的方法来验证所有现有的模拟?

4

1 回答 1

4

(...) 有没有更好的方法来验证所有现有的模拟?

更好的方法是一次测试一件事。也许Rhino 从验证所有显式验证的转变是以这种方式完成的 - 为了促进一次测试单个事物(因此,您应该只需要一次验证)。

很容易意识到验证多个模拟的需要可能来自您想要一次检查多个行为的事实(例如,单个测试)。请注意,这可能是较早几个阶段的非最佳设计选择的结果,您可能会将其(难以编写测试)作为警告信号。

ayende 的 Rhino Mocks 3.5 指南页面中,您不会找到在一个测试中使用两个或模拟的单个示例。

关于模拟和多个存根问题

您使用存根来设置环境/要求,而不是验证您的代码。您永远不会验证存根(例如,是否调用了某些方法或属性是否具有某些值)。存根本质上是您测试的代码使用的只读组件。由于这种区别,stub 永远不会使您的测试失败,而 mock 肯定可以这样做。这就是为什么您可以在 Rhino 示例中看到多个存根,但总是一个模拟。

于 2012-11-16T07:38:46.063 回答