【发布时间】:2021-04-26 23:44:26
【问题描述】:
我发现 EventHubProducerClient 在 c# 中对单元测试不友好(不可模拟),您如何对其进行测试,例如 SendEventsAsync 方法?
【问题讨论】:
标签: c# unit-testing azure-eventhub
我发现 EventHubProducerClient 在 c# 中对单元测试不友好(不可模拟),您如何对其进行测试,例如 SendEventsAsync 方法?
【问题讨论】:
标签: c# unit-testing azure-eventhub
支持模拟和单元测试是新 Azure SDK 的核心目标之一,Azure SDK Design Guidelines 中讨论了我们使用的方法的详细信息。 EventHubProducerClient 的所有公共成员都是 virtual 或可设置的,该类不是密封的,并且可以使用无参数构造函数来确保它可以与 Moq 或 FakeItEasy 等模拟库一起使用。
您应该能够使用与其他类型相同的方法来模拟客户端,方法是使用模拟框架或从类继承并创建自己的模拟类型。
我想进一步了解您关于无法有效模拟或测试客户端的说法。您是否遇到了我们可以提供帮助的特定情况或困难?
【讨论】:
EventHubProducerClient 类,但是当 EventDataBatch 是密封类时,我如何模拟下面的语句。 EventDataBatch eventBatch = 等待 eventHubProducerClient.CreateBatchAsync();
您始终可以使用SendEventsAsync 创建自己的界面并在您的类中使用它,这样您就可以轻松地在单元测试中模拟它。
【讨论】:
SendEventsAsync 添加您自己的接口可能工作正常,但CreateBatchAsync() 方法返回sealed EventDataBatch 类。我看不出人们是如何嘲笑它的,因为您无法创建实例或从该类继承。下面的 Jesse 指出 EventHubsModelFactory 来解决这个问题。