即使有DoNotCallBase时的Nsubstitute调用方法

洛米塔拉尼

我正在部分嘲笑具有以下两个方法的类:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

NSubstitute ForPartsOf ...当调用实型方法时

使用 nSubstitute 时不调用抽象处理方法

Nsubstitute 测试是否调用了私有类的方法

即使没有调用方法,mockito never()也会被调用吗?

以下文档示例时,NSubstitute模棱两可的调用(但使用异步方法)

在NSubstitute中构造对具有抛出异常的void方法的调用序列

如何配置 NSubstitute NOT 调用内部虚方法

测试项目访问私有静态方法时出现问题,即使我从未直接调用它

NSubstitute与PRISM EventAggregator:断言调用方法会触发具有正确有效负载的事件

NSubstitute模拟没有参数的void方法

nsubstitute接收到带有特定对象参数的调用

用特定的args顺序多次调用NSubstitute方法?

nsubstitute 模拟调用任何 XMLNode 值的方法

即使数据没有变化,LiveData观察者的onChanged也会在活动旋转时被调用

NSubstitute在使用ForPartsOf并模拟异步方法时返回NullReferenceException

即使没有直接调用“ if”,它们是否也可以隐式访问类的特殊方法?

即使没有匹配项,如何始终在receive()中调用方法

即使没有子类覆盖它,方法实际上也会被调用吗?

R调用方法时没有找到方法(sma)

函数即使没有被调用也能运行

调用私有方法时的Spring事务

当我按下按钮时没有调用方法

所有服务调用完成时的触发方法

调用方法时如何传递所有局部变量

有同名属性时如何调用扩展方法?

触发并忘记异步Task方法,有时不调用

@Test 失败,当调用方法有 softassert 失败时

实例化抽象类时没有错误,即使未实现抽象方法

有什么方法可以使会话保持活动状态,即使在注销时也是如此?