0
我一直在努力使用Moq的SignalR單元測試框架。 我已經能夠在1組-1客戶端(連接)情況下獲得相當好的結果。如何設置Moq,以便我可以在SignalR中添加多個組和客戶端進行單元測試?
如何設置起訂量,所以我可以:
1)添加/來自同一組中刪除多個客戶端?
2)在同一個模擬集線器上添加/刪除多個組?
我對Moq和SignalR組合的世界比較陌生。
由於提前, JohnB
我一直在努力使用Moq的SignalR單元測試框架。 我已經能夠在1組-1客戶端(連接)情況下獲得相當好的結果。如何設置Moq,以便我可以在SignalR中添加多個組和客戶端進行單元測試?
如何設置起訂量,所以我可以:
1)添加/來自同一組中刪除多個客戶端?
2)在同一個模擬集線器上添加/刪除多個組?
我對Moq和SignalR組合的世界比較陌生。
由於提前, JohnB
下面是一個例子測試增加了客戶端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");
}
}
的基本思路是沿着定義Callback
您Setup
,它存儲了對集合中的測試重要的參數。然後,您可以使用該集合來驗證您嘲笑的方法被稱爲具有正確參數的正確次數。在我的示例測試中,我不驗證對Groups.Add
的調用順序,但您也可以對其進行測試。
此模式非常普通地擴展到測試添加/刪除多個客戶端。基本上,你只需要第二個集合來存儲傳遞給Groups.Add
的connectionId
參數。