加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Nsubstitute调用方法,即使有DoNotCallBase

发布时间:2020-12-15 08:28:51 所属栏目:百科 来源:网络整理
导读:我部分嘲笑有这两种方法的类: public void EmitTo(string connectionId,ChatMessage message){ Clients.Client(connectionId).broadcastMessage(message.User.UserName,message.Message);}public virtual void Broadcast(ChatMessage message){ Clients.All
我部分嘲笑有这两种方法的类:
public void EmitTo(string connectionId,ChatMessage message)
{
    Clients.Client(connectionId).broadcastMessage(message.User.UserName,message.Message);
}

public virtual void Broadcast(ChatMessage message)
{
    Clients.All.broadcastMessage(message.User.UserName,message.Message);
}

在我的测试[SetUp]中,我有这些调用:

hub = Substitute.ForPartsOf<ChatHub>(myMockedClient,context,groupManager);
hub.When(x => x.Broadcast(Arg.Any<ChatMessage>())).DoNotCallBase();
hub.When(x => x.EmitTo(Arg.Any<string>(),Arg.Any<ChatMessage>())).DoNotCallBase();

我在这行上或之后调用方法时没有问题广播调用(他们没有按预期做任何事情)但奇怪的是我的第三行抛出了一个错误:

System.ArgumentException : Argument cannot be null or empty Parameter name: connectionId

我有点迷失,因为我对两种方法做了完全相同的事情并得到了不同的行为,为什么我的when方法调用EmitTo?

解决方法

像大多数模拟框架一样,NSubstitute只能拦截对虚方法的调用.它能够停止对Broadcast的调用,因为它是虚拟的.如果要阻止它被调用,则需要使EmitTo为虚拟.它需要是:
public virtual void EmitTo(string connectionId,message.Message);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读