Поддельная доставка и получение 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.

Для более подробной информации, пожалуйста, проверьте следующие ссылки.

Другие вопросы по тегам