是否可以使用Rhino Mocks生成部分存根?

时间:2008-12-15 14:17:06

标签: rhino-mocks stub

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

public class MyClass
{
  public Accounts[] GetAccounts()
  {
      return GetAccounts(null);
  }

  public Accounts[] GetAccounts(CustomerId id)
  {
      if(id == null)
      {
          // Get all accounts
      }
  }
}

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

[Test]
public void GetAccountsTest()
{
  MockRepository mocks = new MockRepository();
  MyClass stub = mocks.Stub();
  using(mocks.Record())
  {
     Expect.Call(() => stub.GetAccounts()).CallOriginalMethod();
     Expect.Call(() => stub.GetAccounts(null));
  }
  mocks.ReplayAll();
  stub.GetAccounts();
  mocks.VerifyAll();
}

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

我是否需要将虚拟关键字添加到我想要模拟的方法中?

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

1 个答案:

答案 0 :(得分:3)

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