单元测试 SignalR 集线器 [英] Unittest SignalR Hubs

查看:40
本文介绍了单元测试 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆