我正在部分嘲笑具有以下两个方法的类:
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();
我Broadcast
在此行或稍后调用该方法时没有问题(它们没有按预期执行任何操作),但是奇怪的是,第三行引发了错误:
System.ArgumentException:参数不能为null或为空参数名称:connectionId
我有点迷茫,因为我对这两个方法做了完全相同的事情,并且得到了不同的行为,为什么我的when方法调用EmitTo
?
像大多数模拟框架一样,NSubstitute只能拦截对virtual
方法的调用。Broadcast
由于它是虚拟的,因此可以停止对的呼叫。EmitTo
如果要停止调用它,则需要将其虚拟化。它必须是:
public virtual void EmitTo(string connectionId, ChatMessage message)
{
Clients.Client(connectionId).broadcastMessage(message.User.UserName, message.Message);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句