unit-testing - 单元测试 SignalR 集线器

标签 unit-testing testing nunit signalr

我想在 SignalR 中测试我的集线器,最好的方法是什么?

到目前为止我想到的可能的解决方案:

  • 创建可测试的 Hub
  • 分离类的抽象逻辑
  • Selenium(想测试更小的单元)
  • 或者是否忽略了某些 SignalR 测试功能

目前使用 SignalR 0.4 和 NUnit 作为测试框架。

最佳答案

link展示了如何使用 Moq 对 SignalR hub 方法进行单元测试。您模拟存储库、客户端、上下文和调用者。这是该站点的代码,我做了一些小改动以使其适用于最新的 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);  
 }  
} 

然后站点显示您可以使用这个可测试的中心来编写单元测试:

   [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);  
     }  
   }  

关于unit-testing - 单元测试 SignalR 集线器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10797368/

相关文章:

javascript - 模拟 - 在调用构造函数之前设置属性

unit-testing - Jasmine 路线 spy - 未定义不是一个对象(评估 'navigate.calls.mostRecent().args' )

php - 在测试一个测试功能之后使用另一个测试功能?

testing - 我可以使用 TestCafe 进行非浏览器测试吗?

javascript - 尝试将页面对象与 Protractor 一起使用时出现“失败的 : object. 方法不是函数”错误

c# - 如何进行单元测试以测试检查请求 header 的方法?

java - Spring boot @MockBean 疏远行为

c# - 如何使用 Moq 为不同的参数设置方法两次

c# - 完成测试后如何追踪仍在工作的线程?

.net - 在本地运行一些单元测试设置代码,但不在构建服务器上运行