我目前的界面很像以下内容:
interface IService
{
void Start();
IHandler ServiceHandler { get; }
}
interface IHandler
{
event EventHandler OnMessageReceived;
}
使用Rhino Mocks,模拟IService很容易,但它不会将任何IHandler
实例分配给ServiceHandler
属性。因此,当我的测试方法向_mockedService.ServiceHandler.OnMessageReceived
添加一个事件处理程序时,我得到一个'对象引用未设置'错误。
如何确保在模拟IService
实例中为ServiceHandler分配值?
这很可能是犀牛模拟101,但我只是在加快速度......
答案 0 :(得分:4)
IService service = MockRepository.GenerateStub<IService>();
IHandler stubHandler = MockRepository.GenerateStub<IHandler>();
service.Stub(s => s.ServiceHandler).Return(stubHandler);
//assertions
或者,如果您需要记录假货的预期,则可以使用GenerateMock。
编辑:对于旧版本的RhinoMocks,您可以这样做:
MockRepository mocks = new MockRepository();
IService service = mocks.CreateStub<IService>();
IHandler handler = mocks.CreateStub<IHandler>();
using (mocks.Record())
{
SetupResult.For(service.ServiceHandler).Return(handler);
//setup expectations using Expect.Call
}
using (mocks.Playback())
{
//assertions
}