2008-12-15 58 views
2

我是单元测试和模拟的新手,我试图为我的一个类设置测试,我想确保从同一个类中的另一个方法调用特定的方法。因此,我想要使用具体的实施方法,但要剔除其中的一部分。这可能吗?是否有可能用Rhino Mocks生成部分存根?

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

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

因此,我想建立一个存根,将获得GetAccounts()叫(我想使用的具体实施),但我想,以检查是否该方法调用GetAccounts(空)。

 
[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(); 
} 

问题是,具体的类被调用上,我希望当我打电话stub.GetAccounts()在重放过程中得到叫做CallOriginalMethod()线。 因此,无论是在录制过程中还是在执行测试时,我都会调用实现的具体方法,但我只是想将它们嘲笑出来 - 部分正如我已经解释的那样。这是我的误解吗?我是否应该无法模拟/存储具体类以及接口?

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

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

回答

3

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

+0

这可能适合我,但问题是,当设置存根/模拟的方法被称为某种原因,我只想设置expectencies。 – Fadeproof 2008-12-15 14:29:49