我明白模拟和存根之间的区别。RhinoMock:Mocks VS StrictMocks VS DynamicMocks
但是RhinoMock框架中的不同类型的Mock让我感到困惑。
有人能解释一下Mocks VS StrictMocks VS DynamicMocks在RhinoMock框架方面的概念。
您的回答非常感谢。
我明白模拟和存根之间的区别。RhinoMock:Mocks VS StrictMocks VS DynamicMocks
但是RhinoMock框架中的不同类型的Mock让我感到困惑。
有人能解释一下Mocks VS StrictMocks VS DynamicMocks在RhinoMock框架方面的概念。
您的回答非常感谢。
严格的模拟是一个模拟,如果您尝试使用任何未明确设置的方法来使用,它将引发异常。
如果尝试使用未设置的方法,动态(或松散)模拟不会抛出异常,它将简单地从方法返回缺省值
null
并继续。
强烈建议使用动态模拟,因为严格的模拟通常会成为维护的噩梦。 Here's a good blog post,它有一个严格与动态的代码示例,以及为什么严格的模仿通常是一个坏主意。
非常不赞同这一点。
可靠的测试驱动开发是不可能的使用动态模拟,因为你正在测试不一定是你正在实施。
想象一下,你添加了一个foreach循环,你在循环内部做了一个db调用。这非常严重。如果您使用动态模拟来模拟您的依赖关系,您可能会错过嘲笑数据库调用,因此错过了可伸缩性问题,因为您不需要严格模拟每个数据库调用。
public void myMethod()
{
externalMethod1.doSomething();
foreach()
{
externalDbCall.doSql();
}
}
public void testMyMethodWithDynamicMocksPassesAndMissesDbCallInLoop()
{
expect(externalMethod1.doSomething();
}
public void testMyMethodWithStrictMocksFailsAndHighlightsDbCallInLoop()
{
expect(externalMethod1.doSomething();
}
你似乎不明白嘲笑的目的。当你嘲笑某事时,你明确地*不*测试那个特定的事情。如果你正在嘲笑DB代码,那是因为你没有测试DB代码。 – 2012-10-30 11:34:56
如果你试图回答这个问题,你的答案会更好。 – Gevious 2012-10-30 11:50:07
@AndrewBarber我不同意格雷厄姆,但我认为他的观点是你应该关心*你怎么称呼嘲弄的对象,而不是模拟的东西。 – 2012-10-30 12:14:08
吹毛求疵 - >“返回null”应该是这样的 – 2010-08-19 21:05:52
@Merlyn摩根 - 格雷厄姆“返回类型返回默认值” - 伟大的一点:) – womp 2010-08-19 21:17:52
@Merlyn摩根 - 格雷厄姆:非常感谢家伙为闪电般的快速反应。非常感激。 – 2010-08-19 21:22:54