我理解Mock和Stub之间的区别。
但RhinoMock框架中的不同类型的模拟混淆了我。
有人可以用RhinoMock框架来解释Mocks Vs StrictMocks和DynamicMocks的概念。
非常感谢您的回答。
答案 0 :(得分:30)
严格模拟是一个模拟,如果你试图使用任何未明确设置使用的方法,它将抛出异常。
如果您尝试使用未设置的方法,动态(或松散)模拟不会抛出异常,它只会从方法返回 null 默认值并继续运行。
强烈建议使用动态模拟,因为严格的模拟通常会成为维护的噩梦。 Here's a good blog post具有严格与动态的代码示例,以及为什么严格的模拟通常是一个坏主意。
答案 1 :(得分:-3)
在这一点上非常不同意。
使用动态模拟无法进行测试驱动开发,因为您正在测试的不一定是您正在实施的内容。
想象一下,你添加了一个foreach循环,你在循环中进行了一个db调用。这非常严重。如果您使用动态模拟来模拟依赖项,则可能会错过模拟db调用,因此错过了可伸缩性问题,因为您不需要严格模拟每个数据库调用。
public void myMethod()
{
externalMethod1.doSomething();
foreach()
{
externalDbCall.doSql();
}
}
public void testMyMethodWithDynamicMocksPassesAndMissesDbCallInLoop()
{
expect(externalMethod1.doSomething();
}
public void testMyMethodWithStrictMocksFailsAndHighlightsDbCallInLoop()
{
expect(externalMethod1.doSomething();
}