【问题标题】:EventHubProducerClient unit testing in c#C# 中的 EventHubProducerClient 单元测试
【发布时间】:2021-04-26 23:44:26
【问题描述】:

我发现 EventHubProducerClient 在 c# 中对单元测试不友好(不可模拟),您如何对其进行测试,例如 SendEventsAsync 方法?

【问题讨论】:

    标签: c# unit-testing azure-eventhub


    【解决方案1】:

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

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

    我想进一步了解您关于无法有效模拟或测试客户端的说法。您是否遇到了我们可以提供帮助的特定情况或困难?

    【讨论】:

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

    您始终可以使用SendEventsAsync 创建自己的界面并在您的类中使用它,这样您就可以轻松地在单元测试中模拟它。

    【讨论】:

    • 使用SendEventsAsync 添加您自己的接口可能工作正常,但CreateBatchAsync() 方法返回sealed EventDataBatch 类。我看不出人们是如何嘲笑它的,因为您无法创建实例或从该类继承。下面的 Jesse 指出 EventHubsModelFactory 来解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多