如何设置 Moq 以便可以模拟对客户端(浏览器)的 SignalR 调用?

问题描述 投票:0回答:2

我正在为我们的 SignalR 2.x 应用程序构建一个 UnitTest 框架。 我正在使用 Moq 来模拟所需的框架。 我了解了如何使用 Moq 与集线器/服务器端的调用进行交互。 我对如何在客户端执行此操作有点困惑。 如何设置 Moq 以便模拟 SignalR 对客户端(浏览器)的调用?

我见过两种模拟客户端的方法: 1:

var mockClients = new Mock<IHubCallerConnectionContext>();
Clients = mockClients.Object;

2:

const string connectionId = "1234";
const string hubName = "SomeHub";
StateChangeTracker tracker = new StateChangeTracker();
var mockPipelineInvoker = new Mock<IHubPipelineInvoker>(); 

var mockConnection = new Mock<IConnection>();
Clients = new HubConnectionContext(mockPipelineInvoker.Object, mockConnection.Object, hubName, connectionId, tracker);

因此,请考虑以下从集线器到客户端的调用:

ActiveClients.Group(groupName).onNotifyClient(hubMessage);

我刚开始使用 Moq,并且仍在即时解决它。 信息/建议将不胜感激。

谢谢, 约翰B

signalr moq signalr-hub signalr.client
2个回答
0
投票

SignalR 团队对此有教程,请参阅此处


0
投票

对于.NET Core(我的中心是JobsHub)

// Arrange
var mockHub = new Mock<IHubContext<JobsHub>>();
var mockClients = new Mock<IHubClients>();
var mockClient = new Mock<ISingleClientProxy>();

mockClients.Setup(clients => clients.Client(It.IsAny<string>())).Returns(mockClient.Object);
mockHub.Setup(hub => hub.Clients).Returns(mockClients.Object);
© www.soinside.com 2019 - 2024. All rights reserved.