【问题标题】:Mocking Interface Events Error模拟接口事件错误
【发布时间】:2010-09-28 16:58:20
【问题描述】:

我正在尝试模拟如下界面的事件:

[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());
}

我得到的错误是: System.InvalidOperationException: 无效调用,已使用最后一次调用或未进行调用(确保您正在调用虚拟 (C#) / 可覆盖 (VB) 方法)。

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

【问题讨论】:

    标签: c# .net unit-testing mocking rhino-mocks


    【解决方案1】:

    好的,想通了,这就是答案,使用 MockRepository 实例 (an example, sample below taken from there):

    var fooDatabaseMock = new MockRepository();
    var fooDatabase = fooDatabaseMock.DynamicMock<IFooDatabase>();
    fooDatabase.FooDatabaseInsertEvent += null;
    
    LastCall.IgnoreArguments();
    
    var fooEventRaiser = LastCall.GetEventRaiser();
    

    【讨论】:

    • 所以你已经根据给定的链接完全改变了。我问的原因是要了解修复的大小
    • 我没有使用 MockRepository.GenerateMock,而是简单地实例化了 MockRepository 类,并使用了 DynamicMock(我相信,这是不久前的事了)。所以不太难
    • 谢谢!。对我来说,这是另一个问题,比如我试图模拟一个类而不是一个接口。 :(
    猜你喜欢
    • 2016-07-14
    • 2016-01-16
    • 2015-06-05
    • 1970-01-01
    • 2021-08-29
    • 2020-06-03
    • 2014-08-19
    • 2018-05-10
    • 2011-05-15
    相关资源
    最近更新 更多