Поддельная доставка и получение BrokeredMessage Azure ServiceBus
Я создал экземпляр BrokeredMessage и хочу проверить мой код на предмет его доставки по сравнению с максимальным количеством доставки в очереди. Я не хочу стоять в реальной очереди для отправки и получения сообщения, но свойство deliverycount не инициализируется до тех пор, пока сообщение не будет доставлено. Как я могу подделать это?
2 ответа
В итоге я написал вспомогательную функцию с именем GetDeliveryCount, которая приняла сообщение брокера в качестве параметра. Это вернуло сообщение. Для моих юнит-тестов я просто высмеял это, чтобы вернуть все, что хотел.
Мне удалось сделать это и заставить его работать, создавая обертку для полного и оставленного сообщения. Я срабатывал на 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>()));
Надеюсь, это поможет!
свойство deliverycount не инициализируется до тех пор, пока сообщение не будет доставлено. Как я могу подделать это?
Свойство BrokeredMessage.DeliveryCount доступно только для чтения, а значение DeliveryCount будет увеличено после доставки сообщения. Нет простого способа издеваться над классом BrokeredMessage, но библиотека интеграции Obvs.AzureServiceBus, по-видимому, предоставляет способ управления свойствами для целей конкретного теста, вы можете попытаться реализовать свой собственный фиктивный IMessagePropertiesProvider.
Для более подробной информации, пожалуйста, проверьте следующие ссылки.