【问题标题】:Is it possible to generate partial stubs with Rhino Mocks?是否可以使用 Rhino Mocks 生成部分存根?
【发布时间】:2010-09-26 23:28:42
【问题描述】:

我通常是单元测试和模拟的新手,我正在尝试为我的一个类设置测试,我想确保从同一类中的另一个方法调用特定方法。因此,我想使用具体的实现,但要模拟它的一部分。这可能吗?

公共课 MyClass { 公共帐户[] GetAccounts() { 返回GetAccounts(空); } public Accounts[] GetAccounts(CustomerId id) { 如果(id == null) { // 获取所有账户 } } }

因此,我试图设置一个调用 GetAccounts() 的存根(我想使用具体实现),但我想检查该方法是否调用 GetAccounts(null)。

[测试] 公共无效GetAccountsTest() { MockRepository 模拟 = new MockRepository(); MyClass 存根 = mocks.Stub(); 使用(模拟。记录()) { Expect.Call(() => stub.GetAccounts()).CallOriginalMethod(); Expect.Call(() => stub.GetAccounts(null)); } 模拟.ReplayAll(); stub.GetAccounts(); mocks.VerifyAll(); }

问题是具体类在 CallOriginalMethod() 行上被调用,当我调用 stub.GetAccounts() 时,我希望在重播期间调用该行。 因此,无论是在录制期间还是在我执行测试时,当我只是想模拟它们时都会调用实现的具体方法——正如我已经解释的那样。这是我的误解吗?我应该不能模拟/存根具体类和接口吗?

我是否需要将 virtual 关键字添加到我希望能够模拟出来的方法中?

这甚至可能吗?我该怎么做?

【问题讨论】:

    标签: rhino-mocks stub


    【解决方案1】:

    看起来您可能想要使用 PartialMock。它将允许您模拟虚拟方法。

    【讨论】:

    • 这可能适合我,但问题是在设置存根/模拟时,由于某种原因,我只想设置期望值。
    • 那是您正在测试的确切代码吗?尝试将方法设为虚拟。
    • 使它们虚拟化似乎可以解决问题。这是诀窍吗?将我想在存根/模拟中使用的所有方法设为虚拟?
    • 幕后 rhino 会在运行时创建一个继承自你的类的新类。除非您将方法设为虚拟,否则无法拦截对方法的调用(由于 .NET 的设计方式)。
    猜你喜欢
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多