Unit testing Rhino Mocks,MbUnit:检查对象是否引发事件的最佳方法

Unit testing Rhino Mocks,MbUnit:检查对象是否引发事件的最佳方法,unit-testing,rhino-mocks,mbunit,Unit Testing,Rhino Mocks,Mbunit,我正在测试一个引发事件的对象。使用犀牛模型检查它是否被饲养的最好方法是什么 我能想到的最好的(我确信它会比这更好): 我不确定您的测试实际上是如何调用DoSomething()方法的。也许你错过了一些可以引发这场活动的东西。除此之外,我认为您已经走上了使用Rhino Mock测试事件的正确道路 无论如何,我喜欢用另一种方式来处理事件: [Test] public void MyEventTest() { IEventRaiser eventRaiser; mockView =

我正在测试一个引发事件的对象。使用犀牛模型检查它是否被饲养的最好方法是什么

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


我不确定您的测试实际上是如何调用DoSomething()方法的。也许你错过了一些可以引发这场活动的东西。除此之外,我认为您已经走上了使用Rhino Mock测试事件的正确道路

无论如何,我喜欢用另一种方式来处理事件:

[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);
    }
}
[测试]
公共无效MyEventTest()
{
IEventRaiser eventRaiser;
mockView=_mocks.CreateMock();
使用(_mocks.Record())
{
mockView.DoSomethingEvent+=null;
eventRaiser=LastCall.IgnoreArguments();
}
使用(_mocks.Playback())
{
新控制器(mockView、mockModel);
eventRaiser.Raise(mockView,EventArgs.Empty);
}
}
我找到了

以下是直接从他的博客中为那些懒得点击的人编写的代码:

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

我不确定我是否理解索尔,看来你在这里明确地触发了一个事件。当我试图测试对象是否在执行某些操作时隐式触发了事件。
[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");
}