【问题标题】:Azure IQueueClient: How do you simulate incoming messages?Azure IQueueClient:如何模拟传入消息?
【发布时间】:2020-03-02 16:11:52
【问题描述】:

我正在测试的单元是一个 IHostedService,它使用 Microsoft.Azure.ServiceBus 中的 IQueueClient 进行通信。据我所知,没有像 .Receive() 这样的函数,这就是我这样做的原因:

_inputQueueClient.Setup(x => x.RegisterMessageHandler(
                It.IsAny<Func<Message, CancellationToken, Task>>(),
                It.IsAny<MessageHandlerOptions>()))
                .Callback<Func<Message, CancellationToken, Task>, MessageHandlerOptions>((x, y) => _messageReceivedHandler = x);

这样我就可以得到消息处理方法并在我的单元测试中直接调用它。这是模拟收到消息的适当方式还是有更好的方式?

【问题讨论】:

  • 我认为这对于简单的测试来说很好 - 但如果您所做的只是测试单个消息处理程序,那么直接针对您的消息处理程序回调编写单元测试可能会更简单?如果您还必须测试服务总线插件或异常处理程序,则必须做一些更高级的事情。

标签: c# asp.net azure


【解决方案1】:

按照 gnud 所说的:对于一个简单的单元测试,您只需针对消息处理程序方法编写单元测试,Azure 队列客户端本身不会出现在图片中。

如果您无法轻松访问该处理程序以进行单元测试(由于它的访问级别),那么这通常是一个很好的指标,表明您的原始类依赖于一个单独的类。这也有助于您遵守 SRP ?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 2010-12-10
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    相关资源
    最近更新 更多