Создание события из осмеянного объекта с помощью 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 ответа:
Вам нужен
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