C# 信号集线器单元测试

C# 信号集线器单元测试,c#,signalr,C#,Signalr,我已经创建了一个信号集线器,我想对这个集线器进行单元测试。我已经创建了多个测试,当我一个接一个地启动它们时,它们都成功了。但是当我一次运行它们时,测试失败了。失败的原因是该测试使用了一个hub方法,该方法检查某个列表是否至少有一个值。此测试中的列表应为空,但由于其他测试正在运行,因此列表由它们填充 如何运行这些测试,使每个测试都有自己的中心实例 正如您在下面的TryConnect()方法中所看到的,它检查是否设置了列表ConnectedUsers,以及该列表中是否有超过MaxConnectedU

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

如何运行这些测试,使每个测试都有自己的中心实例

正如您在下面的TryConnect()方法中所看到的,它检查是否设置了列表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(字符串[]clientId)
{
var connectionId=Guid.NewGuid().ToString();
var mockClients=new Mock();
var groupManagerMock=new Mock();
Clients=mockClients.Object;
caller.finishedInit=新操作((isAvailable)=>callerResponse.Add(isAvailable));
mockClients.Setup(m=>m.Caller).返回((ExpandoObject)调用者);
Groups=groupManagerMock.Object;
字典环境=新建字典();
添加(“server.RemoteIpAddress”,“127.0.0.10”);
Context=new-HubCallerContext(请求:new-ServerRequest(环境),connectionId:connectionId);
}
集线器TryConnect():

public void InitChat(字符串clientId)
{
bool isChatAvailable=(ConnectedUsers!=null&&ConnectedUsers.Count

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

您不能为每个测试新建一个新的集线器实例吗?这就是信号员实际做的。SignalR为每个集线器方法/事件调用创建一个新的集线器实例。@halter73这就是我所做的,在我第一次调用的每个测试中:HubWrapper hub=new 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);
        }
public void InitChat(string clientId)
        {
            bool isChatAvailable = (ConnectedUsers != null && ConnectedUsers.Count < MaxConnectedUsers);

            Clients.Caller.finishedInit(isChatAvailable);
        }