单元测试 SignalR 集线器 [英] Unittest SignalR Hubs
本文介绍了单元测试 SignalR 集线器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想在 SignalR 中测试我的集线器,最好的方法是什么?
I Would like to test my Hub in SignalR, what is the best approach?
目前我想到的可能解决方案:
Possible solutions I have thought about so far:
- 创建一个可测试的中心
- 分离类的抽象逻辑
- Selenium(想测试更小的单元)
- 或者是否忽略了一些 SignalR 测试功能
目前使用 SignalR 0.4 和 NUnit 作为测试框架.
Currently using SignalR 0.4, and NUnit as the testing framework.
推荐答案
这个 link 展示了如何使用 Moq 对 SignalR 集线器方法进行单元测试.您可以模拟存储库、客户端、上下文和调用者.这是该站点的代码,我做了一些小改动以使其适用于最新的 SignalR:
This link shows how to unit test SignalR hub methods using Moq. You mock up the respository, clients, context, and the caller. Here's the code from the site, I made some minor changes to make it work with the latest SignalR:
public class TestableChatHub : ChatHub
{
public Mock<IChatRepository> MockChatRepository { get; private set; }
public TestableChatHub(Mock<IChatRepository> mockChatRepository)
: base(mockChatRepository.Object)
{
const string connectionId = "1234";
const string hubName = "Chat";
var mockConnection = new Mock<IConnection>();
var mockUser = new Mock<IPrincipal>();
var mockCookies = new Mock<IRequestCookieCollection>();
var mockRequest = new Mock<IRequest>();
mockRequest.Setup(r => r.User).Returns(mockUser.Object);
mockRequest.Setup(r => r.Cookies).Returns(mockCookies.Object);
Clients = new ClientProxy(mockConnection.Object, hubName);
Context = new HubCallerContext(mockRequest.Object, connectionId);
var trackingDictionary = new TrackingDictionary();
Caller = new StatefulSignalProxy(
mockConnection.Object, connectionId, hubName, trackingDictionary);
}
}
然后站点显示您可以使用这个可测试的集线器来编写单元测试:
Then the site shows that you can use this testable hub to write unit tests:
[TestClass]
public class ChatHubTests
{
private TestableChatHub _hub;
public void SetUpTests()
{
_hub = GetTestableChatHub();
}
[Test]
public void ExampleTest()
{
SetUpTests();
const string message = "test";
const string connectionId = "1234";
var result = _hub.Send(message);
_hub.MockChatRepository.Verify(r => r.SaveMessage(message, connectionId));
Assert.IsTrue(result);
}
private TestableChatHub GetTestableChatHub()
{
var mockRepository = new Mock<IChatRepository>();
mockRepository.Setup(m => m.SaveMessage(
It.IsAny<string>(), It.IsAny<string())).Returns(true);
return new TestableChatHub(mockRepository);
}
}
这篇关于单元测试 SignalR 集线器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文