Тест NUnit для QueueClient в Microsoft ServiceBus

Я создаю mocking для QueueClient. У меня GetQueueClient в ServiceBus class. Я использую для этого код ниже.

using NUnit.Framework;
using Moq;    

[TestFixture]
    public sealed class FetchingTest
    {
        private Mock<IServiceBus> mockIServiceBus;
        private Mock<QueueClient> queueClient1;

        [TestFixtureSetUp]
        public void Setup()
        {
            this.mockIServiceBus = new Mock<IServiceBus>();
            this.queueClient1 = new Mock<QueueClient>();
        }

        [Test]
        public void TestPagingUsesCorrectOffsets()
        {
            this.mockIServiceBus.Setup(p => p.GetQueueClient(Constants.FetcherQueueName)).Returns(queueClient1.Object); // Getting error here
        }
    }

Класс служебной шины:

using Microsoft.ServiceBus;
public class ServiceBus : IServiceBus
    {
private static readonly string ServiceBusConnectionString =
            ConfigurationManager.AppSettings[ConnectionStringNames.ServiceBus];

public QueueClient GetQueueClient(string queueName)
        {
            return QueueClient.CreateFromConnectionString(ServiceBusConnectionString, queueName);
        }
}



Выдает ошибку

Parent does not have a default constructor. The default constructor must be explicitly defined. System.NotSupportedException

Может ли кто-нибудь помочь мне решить эту проблему?

вместо этого вам следует использовать абстракцию IQueueClient.

Nkosi 24.07.2018 16:55

@Nkosi Я пытался использовать его, но не могу импортировать необходимую библиотеку.

Jeeten Parmar 24.07.2018 16:56

Если нет доступа к нему, подумайте о создании собственной абстракции и реализации, которая обертывает фактического клиента.

Nkosi 24.07.2018 16:58

Только что проверил и интерфейс общедоступный. Почему ты не можешь получить к нему доступ

Nkosi 24.07.2018 17:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
1 666
1

Ответы 1

Ссылаясь на QueueClient Класс

Убедитесь, что вы зависите от абстракций, а не от реализаций, чтобы избежать проблем с реализацией.

public interface IServiceBus {
    IQueueClient GetQueueClient(string queueName);
}

public class ServiceBus : IServiceBus {
    private static readonly string ServiceBusConnectionString =
        ConfigurationManager.AppSettings[ConnectionStringNames.ServiceBus];

    public IQueueClient GetQueueClient(string queueName) {
        return QueueClient.CreateFromConnectionString(ServiceBusConnectionString, queueName);
    }
}

Таким образом, абстракцию можно смоделировать при необходимости при тестировании.

[TestFixture]
public sealed class FetchingTest
{
    private Mock<IServiceBus> mockIServiceBus;
    private Mock<IQueueClient> queueClient1;

    [TestFixtureSetUp]
    public void Setup() {
        this.mockIServiceBus = new Mock<IServiceBus>();
        this.queueClient1 = new Mock<IQueueClient>();
    }

    [Test]
    public void TestPagingUsesCorrectOffsets() {
        //Arrange
        this.mockIServiceBus
            .Setup(_ => _.GetQueueClient(Constants.FetcherQueueName))
            .Returns(queueClient1.Object);

        //...
    }
}

Мы используем Microsoft.ServiceBus.Messaging, поэтому он конфликтует с Microsoft.Azure.ServiceBus.

Jeeten Parmar 25.07.2018 09:49

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