C# 中的 EventHubProducerClient 单元测试

use*_*441 5 c# unit-testing azure-eventhub

我发现 EventHubProducerClient 在 C# 中不适合单元测试(不可模拟),您如何测试它,例如SendEventsAsync方法?

Jes*_*ire 6

支持模拟和单元测试是新 Azure SDK 的核心目标之一,我们使用的方法的详细信息在Azure SDK 设计指南中讨论。的所有公共成员EventHubProducerClient都是virtual可设置的,该类不是密封的,并且可以使用无参数构造函数来确保它可以与 Moq 或 FakeItEasy 等模拟库一起使用。

您应该能够使用与其他类型相同的方法来模拟客户端,无论是使用模拟框架还是从类继承并创建您自己的模拟类型。

我想更多地了解您关于无法有效模拟或测试客户端的说法。您是否遇到了我们可以帮助解决的特定场景或困难?

  • 每个 Azure SDK 都有一个模型工厂类,允许创建从通常无法直接创建的服务操作返回的类型。在这种情况下,您可以使用 [EventHubsModelFactory](https://learn.microsoft.com/dotnet/api/azure.messaging.eventhubs.eventhubsmodelfactory) 创建用于模拟的批处理。从查询事件中心运行时属性返回的结构也可通过工厂获得。 (6认同)
  • 我的应用程序确实创建了一个 EventDataBatch 并发送它们。我看到我可以模拟 `EventHubProducerClient` 类,但是当 EventDataBatch 是密封类时如何模拟以下语句。EventDataBatch eventBatch = 等待 eventHubProducerClient.CreateBatchAsync(); (2认同)

Kir*_*huk 0

您始终可以创建自己的接口并SendEventsAsync在类中使用它,这将允许您在单元测试中轻松模拟它。