RhinoMock:Mocks、StrictMocks、DynamicMocks

发布于 2024-09-14 19:13:36 字数 147 浏览 5 评论 0原文

我了解模拟和存根之间的区别。

但是RhinoMock框架中不同类型的Mock让我感到困惑。

有人可以根据 RhinoMock 框架解释 Mocks、StrictMocks 和 DynamicMocks 的概念吗?

非常感谢您的回答。

I understand the difference between a Mock and a Stub.

But different types of Mocks in RhinoMock framework confuses me.

Could someone explain the concepts of Mocks Vs StrictMocks Vs DynamicMocks in terms of RhinoMock framework.

your answers are greatly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

江心雾 2024-09-21 19:13:36

严格模拟是一种模拟,如果您尝试使用任何尚未明确设置要使用的方法,则会抛出异常。

如果您尝试使用未设置的方法,动态(或松散)模拟不会引发异常,它只会从该方法返回 null 默认值并继续。

强烈建议使用动态模拟,因为严格的模拟通常会成为维护的噩梦。 这是一篇很好的博客文章,其中包含代码示例严格与动态的区别,以及为什么严格模拟通常是一个坏主意。

A strict mock is a mock that will throw an exception if you try to use any method that has not explicitly been set up to be used.

A dynamic (or loose) mock will not throw an exception if you try to use a method that is not set up, it will simply return null a default value from the method and keep going.

It is highly recommended to use dynamic mocks, as strict mocks generally turn out to be a maintenance nightmare. Here's a good blog post that has a code example of strict vs. dynamic, and why strict mocks are usually a bad idea.

何以畏孤独 2024-09-21 19:13:36

对于这一点,强烈不同意。

可以说,使用动态模拟是不可能进行测试驱动开发的,因为您正在测试的不一定是您正在实现的。

想象一下,您添加了一个 foreach 循环,并在循环内进行了 db 调用。这扩展得非常糟糕。如果您使用动态模拟来模拟依赖项,则可能会错过模拟数据库调用,从而错过可扩展性问题,因为您不需要严格模拟每个数据库调用。

public void myMethod()
{
    externalMethod1.doSomething();
    foreach() 
    {
        externalDbCall.doSql();
    }
}

public void testMyMethodWithDynamicMocksPassesAndMissesDbCallInLoop()
{
    expect(externalMethod1.doSomething();
}

public void testMyMethodWithStrictMocksFailsAndHighlightsDbCallInLoop()
{
    expect(externalMethod1.doSomething();
}

Strongly disagree on this point.

Arguably Test Driven Development is not possible using dynamic mocks, because what you are testing is not necessarily what you are implementing.

Imagine you added a foreach loop where you made a db call inside the loop. This scales very badly. If you used dynamic mocks to mock your dependencies, you would potentially miss mocking the db calls, hence missing the scalability issue because you wouldn't need to strictly mock every db call.

public void myMethod()
{
    externalMethod1.doSomething();
    foreach() 
    {
        externalDbCall.doSql();
    }
}

public void testMyMethodWithDynamicMocksPassesAndMissesDbCallInLoop()
{
    expect(externalMethod1.doSomething();
}

public void testMyMethodWithStrictMocksFailsAndHighlightsDbCallInLoop()
{
    expect(externalMethod1.doSomething();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文