单元测试事件中心EventProcessor



我目前正在学习Microsoft事件中心,我遵循这里的示例代码。我更改了ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> events)方法,以便现在在我获得EventData之后,我将其存储到数据库中。现在,我想使用单元测试来测试我的代码。在测试类中,我设置了一个发送方,并在初始化方法中将数据发送到事件中心,这部分工作得很好。然后我创建了一个新的测试方法来测试接收端。代码看起来像这样:

[TestMethod]
public void TestProcessEventsAsync()
{
    //Initialize the receiver, and run it
    Receiver receiver = new Receiver();
    Receiver r = new Receiver(eventHubName, connectionString);
    r.MessageProcessingWithPartitionDistribution();
    //check if the data is stored in the database
    ...
}

在这里,我只是创建了一个新的receiver实例,并用它来处理发送到事件中心的数据。我只向事件中心发送了三个对象,其中两个使用相同的分区。测试失败,输出显示并非所有分区都初始化,这意味着接收器在处理完所有数据之前就停止了。

我猜,由于MessageProcessingWithPartitionDistribution()方法将任务划分为多个线程,单元测试不能以这种方式工作。所以我的问题是我如何测试这个MessageProcessingWithPartitionDistribution()方法与单元测试?

任何帮助都是感激的!

要确保EventProcessor在你在测试中检查数据库之前干净地关闭,你应该调用:

r.UnregisterEventProcessor();

这应该确保所有挂起的消息都被处理,EventProcessor执行一个受控的关闭。

最新更新