Инъекция зависимостей с использованием NSubstitute - PullRequest
1 голос
/ 02 июля 2019

У меня есть класс обслуживания с внедрением конструктора, который принимает IAppConfig. IAppConfig имеет несколько свойств с только геттерами. И я хотел бы создать экземпляр этого класса обслуживания в моем тестовом проекте.

Мой класс обслуживания

IAppConfig _appConfig;
public class PeopleService(IAppConfig appConfig)
{
   _appConfig = appConfig;
}

Интерфейс AppConfig

public interface IAppConfig
{
   string BaseURL {get;}
   string AnotherProperty {get;}
}

Как мне использовать NSubstitute, чтобы смоделировать IAppConfig для создания экземпляра PeopleService.

Я пробовал приведенный ниже код, но свойства, которые я установил, являются пустой строкой.

var _appConfig = Substitute.For<IAppConfig>();
_appConfig.BaseURL.Returns("http://localhost");
new PeopleService(_appConfig);

Но свойство, установленное в _appConfig, не работает. Я ценю, если кто-то может мне помочь.

1 Ответ

2 голосов
/ 02 июля 2019

Показывает это, поскольку это слишком много, чтобы добавить комментарий.

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

[TestClass]
public class MyTestClass {
    [TestMethod]
    public void NSubstitute_Mocking_ReadOnly_Properties_Works() {
        //Arrange
        var expected = "http://localhost";
        var _appConfig = Substitute.For<IAppConfig>();
        _appConfig.BaseURL.Returns(expected);
        var subject = new PeopleService(_appConfig);

        //Act
        var actual = subject.URL;

        //Assert
        actual.Should().Be(expected);
    }
}

class PeopleService {
    IAppConfig _appConfig;
    public PeopleService(IAppConfig appConfig) {
        _appConfig = appConfig;
    }
    public string URL => _appConfig.BaseURL;
}

public interface IAppConfig {
    string BaseURL { get; }
    string AnotherProperty { get; }
}

Приведенный выше пример прошел тестирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...