单元测试事件中心 EventProcessor
Unit Test event hub EventProcessor
我目前正在学习 Microsoft 事件中心,我遵循了示例代码 here。我更改了 ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> events)
方法,以便现在在获取 EventData 后,将其存储到数据库中。现在,我想使用单元测试来测试我的代码。在测试 class 中,我设置了一个发送器并使用初始化方法将数据发送到事件中心,这部分工作正常。然后我创建了一个新的测试方法来测试接收端。代码如下所示:
[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 执行受控关闭。
我目前正在学习 Microsoft 事件中心,我遵循了示例代码 here。我更改了 ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> events)
方法,以便现在在获取 EventData 后,将其存储到数据库中。现在,我想使用单元测试来测试我的代码。在测试 class 中,我设置了一个发送器并使用初始化方法将数据发送到事件中心,这部分工作正常。然后我创建了一个新的测试方法来测试接收端。代码如下所示:
[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 执行受控关闭。