用于测试依赖类的模拟信号集线器



我正在尝试实例化处理一堆功能的类,并使用依赖项注入构建。我嘲笑我的两个参数,第三个是内存数据库上下文。现在,当断言时,它在mockClientProxyParticipants.Verify()行上丢了错误:

system.notsupportedException:在扩展方法上验证无效:proxy => proxy.SendAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<CancellationToken>())

几乎不可能不调用该函数,而用Times.Never()调用Verify(),因为参数不会更改任何内容。

我尝试使用诸如mockClientProxyResults.Verify()之类的普通字符串来设置Verify()的LINQ参数,我尝试使用It.Is<string>(s => s == "some string"),然后尝试了It.IsAny<string>()

老实说,我现在不明白什么问题。这是我的测试代码,让我知道您是否想查看更多:

var mockHub = new Mock<IHubContext<VoteHub>>();
var mockClients = new Mock<IHubClients>();
var mockClientProxyParticipants = new Mock<IClientProxy>();
var mockClientProxyResults = new Mock<IClientProxy>();
mockClients.Setup(clients => clients.Group("Participants")).Returns(mockClientProxyParticipants.Object);
mockClients.Setup(clients => clients.Group("Results")).Returns(mockClientProxyResults.Object);
mockHub.Setup(hub => hub.Clients).Returns(mockClients.Object);
var activeQuestionManagerMock = new Mock<IActiveQuestionManager>();
activeQuestionManagerMock.Setup(x => x.GetActiveQuestion())
    .Returns(new ActiveQuestionModel(options));
QuestionHandler qm = new QuestionHandler(new VoteDbContext(options), mockHub.Object, activeQuestionManagerMock.Object);
//Act
qm.Ask(question);
//Assert
mockClientProxyParticipants.Verify(proxy => proxy.SendAsync(It.IsAny<string>(/*s => s == "AskQuestion"*/), It.IsAny<string>(/*s => s == qwaJSON*/), It.IsAny<CancellationToken>()), Times.Once());
mockClientProxyResults.Verify(proxy => proxy.SendAsync("UpdateCurrentQuestionProgress", It.IsAny<ActiveQuestionModel>(), default(CancellationToken)), Times.Once());

事实证明,我误解了错误消息,问题是IClientProxy.SendAsync()是一种扩展方法,而MOQ显然不喜欢那样。可以改用SendCoreAsync(),但是即使您只想发送一个对象或根本不想发送任何数据。

信用nkosi(请参阅问题评论(

最新更新