Rhino mock an abstract class w/o mocking its virtual method?
我能执行一个虚拟方法的主体吗?这个虚拟方法存在于一个抽象类中,而这个抽象类是使用Rhino Mocks模拟的?
很明显,我并不是在模仿虚拟方法的行为。我正在尝试/测试/虚拟方法(在模拟类上)。
这是明目张胆地滥用犀牛模型吗?
是的,那应该很好。我不能说我试过了,但如果失败了我会很惊讶的。
编辑:我怀疑你想要
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | using System; using Rhino.Mocks; public abstract class Abstract { public virtual int Foo() { return Bar() * 2; } public abstract int Bar(); } class Test { static void Main(string[] args) { MockRepository repository = new MockRepository(); Abstract mock = repository.PartialMock<Abstract>(); using (repository.Record()) { Expect.Call(mock.Bar()).Return(5); } Console.WriteLine(mock.Foo()); // Prints 10 } } |
编辑:或在我第一次尝试AAA时:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | using System; using Rhino.Mocks; public abstract class Abstract { public virtual int Foo() { return Bar() * 2; } public abstract int Bar(); } class Test { static void Main(string[] args) { // Arrange Abstract mock = MockRepository.GeneratePartialMock<Abstract>(); mock.Stub(action => action.Bar()).Return(5); // Act int result = mock.Foo(); // Assert mock.AssertWasCalled(x => x.Bar()); // And assert that result is 10... } } |
您需要告诉Rhino.Mocks回拨原始实现,而不是执行其默认行为,即只截取调用:
1 2 | var mock = MockRepository.GenerateMock<YourClass>(); mock.Setup(m => m.Foo()).CallOriginalMethod(OriginalCallOptions.NoExpectation); |
现在您可以在您的