【问题标题】:Fake delivery and receipt of a BrokeredMessage Azure ServiceBusBrokeredMessage Azure ServiceBus 的虚假交付和接收
【发布时间】:2017-04-26 17:30:40
【问题描述】:

我创建了一个 BrokeredMessage 实例,并希望围绕它的传递计数与队列的最大传递计数来测试我的代码。我不想建立一个真正的队列来发送和接收消息,但是在传递消息之前不会初始化 deliverycount 属性。我怎么能伪造这个?

【问题讨论】:

    标签: azure-servicebus-queues brokeredmessage


    【解决方案1】:

    我设法模拟了这一点,并让它为完整和放弃消息创建一个包装器。在没有包装器的情况下进行单元测试时,我在 message.Complete() 上绊倒了。

    创建一个类和接口来处理消息操作。

        public class MainServiceBusClientWrapper : IServiceBusClientWrapper
        {
            public void Complete(BrokeredMessage message) => message.Complete();
            public void Abandon(BrokeredMessage message) => message.Abandon();
        }
    

    在处理传入服务总线消息的类中执行此操作:

    private IServiceBusClientWrapper _serviceBusWrapper;
    
    _serviceBusWrapper.Complete(message);
    

    代替:

    message.Complete();
    

    在您的单元测试中,您可以执行以下操作以确保 BrokeredMessage 操作不会失败:

    _serviceBusWrapper.Setup(p => p.Complete(It.IsAny<BrokeredMessage>()));
    

    我希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      deliverycount 属性在消息被传递之前不会被初始化。我怎么能伪造这个?

      BrokeredMessage.DeliveryCount property 是只读的,消息传递后DeliveryCount 的值会增加。没有简单的方法来模拟 BrokeredMessage 类,但 Obvs.AzureServiceBus 集成库似乎提供了一种控制属性以用于特定测试的方法,您可以尝试实现自己的模拟/假 IMessagePropertiesProvider。

      更多详细信息,请查看以下链接。

      【讨论】:

        【解决方案3】:

        我最终只编写了一个名为 GetDeliveryCount 的辅助函数,它接受一个代理消息作为参数。这返回了 message.DeliverCount。对于我的单元测试,我只是嘲笑它以返回我想要的任何东西。

        【讨论】:

        • 你能给我你的样品吗?我也面临同样的问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多