SignalR集线器单元测试

时间:2014-12-12 08:46:29

标签: c# signalr

我创建了一个SignalR集线器,我想对这个集线器进行单元测试。我已经创建了多个测试,当我一个接一个地开火时,它们都会成功。但是,当我同时运行它们时,测试失败了。失败的原因是此测试使用hub方法检查某些List是否至少有一个值。该测试中的列表应为空,但由于其他测试正在运行,因此列表将填充该列表。

如何运行此测试,以便每个测试都有自己的集线器实例?

正如您在TryConnect()方法中看到的那样,它会检查List ConnectedUsers是否已设置,以及该列表中是否还有 MaxConnectedUsers 。在失败的测试中,不应该设置和填充列表...但是,由于正在运行的其他测试,它是。

我该如何正确测试?

对于每个测试,我创建一个模拟的集线器:

[TestMethod]
public void InitChat_Available()
{
  HubWrapper hub = new HubWrapper();
  hub.TryConnect();

  Assert.AreEqual(1, hub.callerResponse.Count);
  Assert.IsFalse((bool)hub.callerResponse[0]);
}

Init方法(在HubWrapper构造函数中调用):

public void Init(string[] clientIds)
        {
            var connectionId = Guid.NewGuid().ToString();
            var mockClients = new Mock<IHubCallerConnectionContext<dynamic>>();
            var groupManagerMock = new Mock<IGroupManager>();

            Clients = mockClients.Object;

        caller.finishedInit = new Action<bool>((isAvailable) => callerResponse.Add(isAvailable));

            mockClients.Setup(m => m.Caller).Returns((ExpandoObject)caller);
            Groups = groupManagerMock.Object;
            Dictionary<string, object> environment = new Dictionary<string, object>();
            environment.Add("server.RemoteIpAddress", "127.0.0.10");
            Context = new HubCallerContext(request: new ServerRequest(environment), connectionId: connectionId);
        }

Hub TryConnect():

public void InitChat(string clientId)
        {
            bool isChatAvailable = (ConnectedUsers != null && ConnectedUsers.Count < MaxConnectedUsers);

            Clients.Caller.finishedInit(isChatAvailable);
        }

我删除了一些(针对此问题)不必要的代码。

0 个答案:

没有答案