我是一般的单元测试和模拟的新手,我正在尝试为我的一个类设置测试,我想确保从同一个类中的另一个方法调用特定方法。因此,我想使用具体的实现,但嘲笑它的一部分。这可能吗?
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()时,我希望在重放期间调用它。 因此,无论是在录制期间还是在执行测试时,我都会调用实现的具体方法,因为我只是想将它们嘲笑 - 正如我已经解释过的那样。这是我的误解吗?我是否应该无法模拟/存根具体的类以及接口?
我是否需要将虚拟关键字添加到我想要模拟的方法中?
这甚至可能吗?我该怎么做?
答案 0 :(得分:3)
看起来您可能想要使用PartialMock。它将允许您模拟虚拟方法。