【发布时间】:2018-02-24 07:13:44
【问题描述】:
我正在使用 MOCK (Moq) 为我的 Azure 事件中心 编写 单元测试。单元测试很简单。当我向我的事件中心发送 1 条消息时,我需要确保它确实收到了 1 条消息。这就是我正在做的……
Mock<IEventHub> eventHubMock;
eventHubMock
.Setup( client => client.SendBatchAsync( It.IsAny<IEnumerable<EventData>>() ) )
.Returns( Task.CompletedTask );
// Some processing which sends 1 message to Event Hub.
// Now to verify that my mock did receive 1 message.
eventHubMock.Verify(
client => client.SendBatchAsync(
It.IsAny<IEnumerable<EventData>>() ) );
问题
- 上面的内容只是验证它收到了一些 EventData。如何验证它是否收到了 1 个 EventData?
- 我还可以使用 Mock 执行哪些其他验证?
- 我的代码处理 2 个事件中心。如何确保将消息发送到正确的事件中心?
【问题讨论】:
-
要验证您是否只通过了 1 个
EventData,您可以像这样设置它:It.Is<IEnumerable<EventData>>(e => e.ToList().Count == 1)。规则是每个问题 1 个问题(?)。另外,你的第二个问题没有意义...... -
当前状态下的问题不完整,因此不清楚。阅读How to Ask,然后阅读edit 问题,提供minimal reproducible example,可用于重现问题,从而更好地理解所问的问题。
-
有一个额外的参数可以提供给验证,以说明您希望调用它的次数。试试
eventHubMock.Verify( client => client.SendBatch( your parameters here ), Times.Once);
标签: c# unit-testing mocking moq azure-eventhub