2

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

4

3 回答 3

2

我设法模拟了这一点,并让它为完整和放弃消息创建一个包装器。在没有包装器的情况下进行单元测试时,我在 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>()));

我希望这有帮助!

于 2019-07-12T19:29:52.680 回答
0

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

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

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

于 2017-04-27T08:39:25.097 回答
0

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

于 2017-05-02T20:44:12.577 回答