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