Создание события из осмеянного объекта с помощью Rhino


У меня есть проблема с вызовом события на осмеянном объекте. Я использую Rhino Mocks 3.4. Я изучал подобные вопросы, но не смог воспроизвести ни одного из предложенных решений.

У меня есть класс-Foo - который имеет частный метод, к которому можно получить доступ только путем вызова события с помощью встроенного интерфейса-IBar.

Как мне поднять событие IBar.BarEvent, от объекта RhinoMock, чтобы я мог протестировать метод в Foo?

Вот мой код:

[TestFixture]
public sealed class TestEventRaisingFromRhinoMocks
{

    [Test]
    public void Test()
    {
        MockRepository mockRepository = new MockRepository();
        IBar bar = mockRepository.Stub<IBar>();

        mockRepository.ReplayAll();

        Foo foo = new Foo(bar);

        //What to do, if I want invoke bar.BarEvent with value =123??

        Assert.That(foo.BarValue, Is.EqualTo(123));

    }

}


public class Foo
{
    private readonly IBar _bar;
    private int _barValue; 

    public Foo(IBar bar)
    {
        _bar = bar;
        _bar.BarEvent += BarHandling; 
    }

    public int BarValue
    {
        get { return _barValue; }
    }

    private void BarHandling(object sender, BarEventArgs args)
    {
        //Eventhandling here: How do I get here with a Rhino Mock object? 
        _barValue = args.BarValue;
    }
}


public interface IBar
{
    event EventHandler<BarEventArgs> BarEvent;
}


public class BarEventArgs:EventArgs
{
    public BarEventArgs(int barValue)
    {
        BarValue = barValue;
    }
    public int BarValue { get; set; } 
}
2 2

2 ответа:

Вам нужен IEventRaiser, который вы можете получить через

bar.BarEvent += null;
var eventRaiser = LastCall.IgnoreArguments().GetEventRaiser();
Затем, когда вы хотите вызвать событие, вы можете вызвать eventRaiser.Raise с требуемыми аргументами, например sender и event args (зависит от вашего определения обработчика событий).

(правка: это основано на Rhino.Издевается над ним!)

Что - то вроде этого я думаю:

bar.Raise(x => x.BarEvent += null, this, EventArgs.Empty);

Http://ayende.com/wiki/Rhino+Mocks+3.5. ashx#Howtoraiseevents