我正在为我们的 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 团队对此有教程,请参阅此处
对于.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);