首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在EventHandler<T>中使用NSubstitute引发事件?

如何在EventHandler<T>中使用NSubstitute引发事件?
EN

Stack Overflow用户
提问于 2018-08-20 19:55:14
回答 1查看 1.8K关注 0票数 1

我有一个定义多个事件的接口,其中一些带有T的委托类型EventHandler<T>,例如<string>。实现此接口的对象在另一个类中使用,简单的排列如下所示:

代码语言:javascript
运行
复制
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替换这些对象...替换,我的代码看起来像这样:

代码语言:javascript
运行
复制
    [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。(实际上,在我必须编写的代码中,它不是一个字符串,而是一个自定义类型,但我将其简化为以下形式)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-20 21:32:49

Raise.EventWith<TEventArgs>语法要求TEventArgs派生(请参见source)。

要使用非EventArgs和其他可以使用的委托类型,可以使用Raising Delegate events中描述的Raise.Event<TDelegate>

代码语言:javascript
运行
复制
// 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);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51930227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档