为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用带有 EventHandler<T> 的 NSubstitute 引发事件?

如何使用带有 EventHandler<T> 的 NSubstitute 引发事件?

C#
MMMHUHU 2021-12-05 14:59:00
我有一个定义多个事件的接口,其中一些具有委托类型EventHandler<T>,T例如<string>. 实现这个接口的对象在另一个类中使用,一个简单的安排看起来像这样:public interface IEventEmitter{    event EventHandler mySimpleEvent;    event EventHandler<string> myStringEvent;}public class EventObserver{    public IEventEmitter Emitter;    public int called = 0;    public EventObserver(IEventEmitter emitter)    {        Emitter = emitter;        Emitter.myStringEvent += (sender, text) =>        {            called++;            Console.WriteLine("Observed event: {0}", text);        };        Emitter.mySimpleEvent += (sender, args) =>        {            called++;             Console.WriteLine("Observed event: simple");        };        Console.WriteLine("Registered observer");    }}现在我想用 NUnit3 和 NSubstitute 3.1.0 测试代码。使用 NSubstitute 我可以用 ...eh... 替代品来替代这些对象,我的代码如下所示:    [Test()]    public void EventObserverTest()    {        // Arrange        IEventEmitter emitter = Substitute.For<IEventEmitter>();        var observer = new EventObserver(emitter);        // Act        emitter.mySimpleEvent += Raise.Event();// the following line doesn't work        emitter.myStringEvent += Raise.EventWith<EventHandler<string>>("Yeah");        // Assert        Assert.AreEqual(2, observer.called);     } 提高mySimpleEvent从替代精彩的作品,但我被卡住,无法弄清楚如何提高myStringEvent。(其实在代码中我要写的不是字符串而是自定义Type,但是我把它归结为这种形式)。
查看完整描述

1 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

的Raise.EventWith<TEventArgs>语法要求T从导出EventArgs(参照源)。


要EventArgs使用我们可以使用的非委托类型和其他委托类型,可以Raise.Event<TDelegate>按照引发Delegate事件中的说明使用:


// Arrange

IEventEmitter emitter = Substitute.For<IEventEmitter>();

var observer = new EventObserver(emitter);

// Act

emitter.mySimpleEvent += Raise.Event();

emitter.myStringEvent += Raise.Event<EventHandler<string>>(this, "Yeah");

// Assert

Assert.AreEqual(2, observer.called);


查看完整回答
反对 回复 2021-12-05
  • 1 回答
  • 0 关注
  • 171 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信