Rhino Mocks:如何在方法调用中模拟方法调用?
问题描述:
我有一个非常简单的类有两种方法;一个将被调用,另一个将调用。这个想法是调用OuterMockMethod方法,但模拟InnerMockMethod。现在我只能模仿OuterMockMethod方法。Rhino Mocks:如何在方法调用中模拟方法调用?
public class MockClass : IMockInterface
{
public virtual MockClass InnerMockMethod()
{
MockClass returnValue;
returnValue = new MockClass();
returnValue.SomeMessage = "Not mocked";
return returnValue;
}
public virtual MockClass OuterMockMethod()
{
MockClass mock;
mock = new MockClass();
return mock.MockedMethod();
}
}
现在这个工作,但它不是我想要嘲笑方法:
public void MockTest_Internal()
{
MockClass returnedClass;
MockClass mockProvider;
mockProvider = repository.StrictMock<MockClass>();
mockProvider.Expect(item => item.OuterMockMethod())
.Return(new MockClass { SomeMessage = "Mocked" });
repository.Replay(mockProvider);
returnedClass = mockProvider.OuterMockMethod();
Assert.IsTrue(returnedClass.SomeMessage == "Mocked");
}
正如你所看到的,它会调用OuterMockMethod它喜欢,但我不希望出现这种情况。我想嘲笑InnerMockMethod,这样当它被OuterMockMethod调用时,它将返回我想要的内容。
public void MockTest_Internal()
{
MockClass returnedClass;
MockClass mockProvider;
mockProvider = repository.StrictMock<MockClass>();
mockProvider.Expect(item => item.InnerMockMethod())
.Return(new MockClass { SomeMessage = "Mocked" });
repository.Replay(mockProvider);
returnedClass = mockProvider.OuterMockMethod(); //Boom angry Rhino
Assert.IsTrue(returnedClass.SomeMessage == "Mocked");
}
答
在这种情况下,你需要把模拟返回的对象上:
MockClass returnedMock = MockRepository.GenerateMock<MockClass>();
returnedMock.Expect(rm => rm.InnerMockMethod())
.Return(new MockClass { SomeMessage = "Mocked" });
mockProvider.Expect(mp => mp.OuterMockMethod()).Return (returnedMock);
returnedClass = mockProvider.OuterMockMethod();
...
注意StrictMock已被弃用。现在首选的模式是AAA(Arrange,Act,Assert)。你可以找到更多信息here。
再次感谢。非常有帮助。 – 2008-12-15 23:35:09