2014-05-07 22 views

回答

1

下面是一個例子測試增加了客戶端multipe使用起訂量和xUnit.net組:

[Fact] 
public async Task MyHubAddsConnectionToTheCorrectGroups() 
{ 
    // Arrange 
    var groupManagerMock = new Mock<IGroupManager>(); 
    var connectionId = Guid.NewGuid().ToString(); 
    var groupsJoined = new List<string>(); 

    groupManagerMock.Setup(g => g.Add(connectionId, It.IsAny<string>())) 
        .Returns(Task.FromResult<object>(null)) 
        .Callback<string, string>((cid, groupToJoin) => 
         groupsJoined.Add(groupToJoin)); 

    var myHub = new MyHub(); 
    myHub.Groups = groupManagerMock.Object; 
    myHub.Context = new HubCallerContext(request: null, 
             connectionId: connectionId); 

    // Act 
    await myHub.AddToGroups(); 

    // Assert 
    groupManagerMock.VerifyAll(); 
    Assert.Equal(3, groupsJoined.Count); 
    Assert.Contains("group1", groupsJoined); 
    Assert.Contains("group2", groupsJoined); 
    Assert.Contains("group3", groupsJoined); 
} 

public class MyHub : Hub 
{ 
    public async Task AddToGroups() 
    { 
     await Groups.Add(Context.ConnectionId, "group1"); 
     await Groups.Add(Context.ConnectionId, "group2"); 
     await Groups.Add(Context.ConnectionId, "group3"); 
    } 
} 

的基本思路是沿着定義CallbackSetup,它存儲了對集合中的測試重要的參數。然後,您可以使用該集合來驗證您嘲笑的方法被稱爲具有正確參數的正確次數。在我的示例測試中,我不驗證對Groups.Add的調用順序,但您也可以對其進行測試。

此模式非常普通地擴展到測試添加/刪除多個客戶端。基本上,你只需要第二個集合來存儲傳遞給Groups.AddconnectionId參數。

相關問題