gpt4 book ai didi

c# - 即使有 DoNotCallBase,Nsubstitute 在 When 中调用方法

转载 作者:太空狗 更新时间:2023-10-29 21:17:08 27 4
gpt4 key购买 nike

我正在部分模拟具有这两种方法的类:

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 : Argument cannot be null or empty Parameter name: connectionId

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

最佳答案

像大多数模拟框架一样,NSubstitute 只能拦截对 virtual 方法的调用。它能够停止对 Broadcast 的调用,因为它是虚拟的。如果你想停止调用它,你需要将 EmitTo 设为虚拟。它必须是:

public virtual void EmitTo(string connectionId, ChatMessage message)
{
Clients.Client(connectionId).broadcastMessage(message.User.UserName, message.Message);
}

关于c# - 即使有 DoNotCallBase,Nsubstitute 在 When 中调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30394198/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com