如何计算通过最小起订量发送到事件中心的事件数量以进行单元测试

How to count # of events sent to event hub via Moq for Unit Testing

我正在为我的 Azure 事件中心 使用 MOCK(Moq) 编写 单元测试 .单元测试很简单。当我向我的事件中心发送 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>>() ) );

问题

  1. 以上只是验证它收到了一些事件数据。我如何验证它收到了 1 个 EventData?
  2. 我可以使用 Mock 执行哪些其他验证?
  3. 我的代码处理 2 个事件中心。如何确保将消息发送到正确的事件中心?

您应该使用It.Is<T>(Expression)方法来验证参数:

eventHubMock.Verify(
    client => client.SendBatch(
        It.Is<IEnumerable<EventData>>(es => es.Count() == 0 && IsValid(es.First()))));

其中 IsValid(EventData eventData) 是一些辅助方法,用于检查您想要的有关事件的所有信息。

事件转到哪个事件中心是在您创建发送者时定义的,而不是在您使用它时定义的。所以检查应该与 Some processing which sends 1 message to Event Hub 块内发生的事情有关,现在很难给出任何细节。