Я пытаюсь создать экземпляр класса, который обрабатывает множество функциональных возможностей и создается с использованием внедрения зависимостей.Я высмеиваю два моих параметра, а третий - контекст базы данных в памяти.Теперь при подтверждении выдается ошибка в строке mockClientProxyParticipants.Verify()
:
System.NotSupportedException: недопустимая проверка для метода расширения: proxy => proxy.SendAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<CancellationToken>())
Это фактическиневозможно не вызвать функцию, и вызов Verify()
с Times.Never()
в качестве параметра ничего не меняет.
Я попытался настроить аргумент Linq для Verify()
, используя обычные строки, такие как для mockClientProxyResults.Verify()
, я попытался использовать 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());