何时使用严格的模拟?

Pio*_*rak 2 tdd unit-testing moq mocking

我正在尝试提出一种场景,其中应该使用严格的模拟。我想不到。

您何时使用严格的模拟,为什么?

met*_*bed 5

当您要验证是否已使用适当的参数调用了预期的方法时,将使用普通(或宽松)模拟。

严格的模拟用于验证调用了预期的方法,而没有其他方法被调用。将它们视为一种负面测试。

在大多数情况下,进行严格的模拟会使您的单元测试非常脆弱。即使您做了很小的内部实现更改,测试也开始失败。

但是,让我给您一个示例,说明它们可能有用的地方-测试诸如以下要求:

“如果缓存已经包含数据,则Get on a cache 不应访问该数据库”。

有多种方法可以使用松散的模拟来实现此目的,但是,相反,只需设置Mock<Database>零个预期函数调用即可很方便。然后,对该数据库的任何调用都将引发异常并通过测试。


您要使用严格模拟的另一种情况是AdapterWrapper设计模式。在这种模式下,您不会执行太多的业务逻辑。测试这些类的主要部分是是否使用正确的参数(而不是其他参数)调用了基础函数。在这种情况下,严格的模拟效果很好。