【问题标题】:Rhino Mocks, MbUnit: Best way to check if object has raised an eventRhino Mocks,MbUnit:检查对象是否引发事件的最佳方法
【发布时间】:2008-09-29 14:45:19
【问题描述】:

我正在测试一个引发事件的对象。使用 Rhino Mocks 检查它是否被饲养的最佳方法是什么?

我能想到的最好的(我确信它会比这更好):

public void MyCallback(object sender, EventArgs e) { _flag = true;}

[Test]
public void DoSomethingRaisesEvent() {
  _flag = false;
  using(_mocks.Record()) {
    Expect.Call(delegeate { _obj.DoSomething();});
  }
  using(_mocks.Playback()) {
    _obj = new SomethingDoer();
    _obj.SomethingWasDoneEvent += new EventHandler(MyHandler);
    Assert.IsTrue(_flag);
  }
}

【问题讨论】:

    标签: unit-testing rhino-mocks mbunit


    【解决方案1】:

    我找到this article by Phil Haack on how to test events using anonymous delegates

    以下是代码,直接从他的博客中翻录给那些懒得点击的人:

    [Test]
    public void SettingValueRaisesEvent()
    {
        bool eventRaised = false;
        Parameter param = new Parameter("num", "int", "1");
        param.ValueChanged += 
            delegate(object sender, ValueChangedEventArgs e)
            {
                Assert.AreEqual("42", e.NewValue);
                Assert.AreEqual("1", e.OldValue);
                Assert.AreEqual("num", e.ParameterName);
                eventRaised = true;
            };
        param.Value = "42"; //should fire event.
    
        Assert.IsTrue(eventRaised, "Event was not raised");
    }
    

    【讨论】:

      【解决方案2】:

      我不确定您的测试实际上是如何调用 DoSomething() 方法的。也许你错过了一些触发事件的东西。除此之外,我认为你在使用 Rhino Mocks 测试事件方面走在了正确的轨道上

      无论如何,这是我喜欢处理事件的另一种方式:

      [Test]
      public void MyEventTest()
      {
      
          IEventRaiser eventRaiser;
      
          mockView = _mocks.CreateMock<IView>();
          using (_mocks.Record())
          {
            mockView.DoSomethingEvent += null;
            eventRaiser = LastCall.IgnoreArguments();
          }
          using (_mocks.Playback())
          {
             new Controller(mockView, mockModel);
             eventRaiser.Raise(mockView, EventArgs.Empty);
          }
      }
      

      【讨论】:

      • 我不确定我是否理解 Saul,好像在这里你明确地触发了一个事件。而我正在尝试测试对象在做某事时是否隐式触发了事件。
      猜你喜欢
      • 2018-08-17
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多