C# 模拟接口事件错误

C# 模拟接口事件错误,c#,.net,unit-testing,mocking,rhino-mocks,C#,.net,Unit Testing,Mocking,Rhino Mocks,我试图模拟接口的事件,如下所示: [TestMethod] public void NeedingDataFiresEvents() { //Arrange var service = MockRepository.GenerateMock<IService>(); service.Expect(i => i.GetValue()).Return(5); var view = MockRepository.GenerateMock<ILog

我试图模拟接口的事件,如下所示:

[TestMethod]
public void NeedingDataFiresEvents()
{
    //Arrange
    var service = MockRepository.GenerateMock<IService>();
    service.Expect(i => i.GetValue()).Return(5);
    var view = MockRepository.GenerateMock<ILogView>();
    view.NeedData += null;
    LastCall.IgnoreArguments();
    var evt = LastCall.GetEventRaiser();

    var presenter = new LogPresenter(view, service);
    var args = new DataEventArgs();

    //Act
    evt.Raise(view, args);

    //Assert
    Assert.AreEqual(1, args.Results.Count());
}
[TestMethod]
public void NeedingDataFiresEvents()
{
//安排
var service=MockRepository.GenerateMock();
Expect(i=>i.GetValue()).Return(5);
var view=MockRepository.GenerateMock();
view.NeedData+=null;
LastCall.IgnoreArguments();
var evt=LastCall.GetEventRaiser();
var presenter=新的LogPresenter(视图、服务);
var args=new DataEventArgs();
//表演
evt.Raise(视图,参数);
//断言
aresequal(1,args.Results.Count());
}
我得到的错误是: System.InvalidOperationException:调用无效,已使用最后一个调用或未进行任何调用(请确保调用的是虚拟(C#)/Overridable(VB)方法)


我不知道为什么。。。我做错了什么?如果我没有实际实例化视图,我会应用什么虚拟的呢。。。演示者中的某些内容?

好的,找到了答案,使用MockRepository实例():

var fooDatabaseMock=newmockrepository();
var fooDatabase=fooDatabaseMock.DynamicMock();
fooDatabase.FooDatabaseInsertEvent+=null;
LastCall.IgnoreArguments();
var fooEventRaiser=LastCall.GetEventRaiser();

因此,您已根据给定的链接进行了完全更改。我问的原因是为了理解FixRepository的大小,而不是MockRepository.GenerateMock,我只是实例化了MockRepository类,并使用了DynamicMock(我相信,这是很久以前的事了)。所以不要太辛苦,谢谢!。对我来说,这是另一个问题,就像我试图模拟一个类而不是一个接口一样(
var fooDatabaseMock = new MockRepository();
var fooDatabase = fooDatabaseMock.DynamicMock<IFooDatabase>();
fooDatabase.FooDatabaseInsertEvent += null;

LastCall.IgnoreArguments();

var fooEventRaiser = LastCall.GetEventRaiser();