Утверждение свойства было установлено в ложном классе - PullRequest
0 голосов
/ 01 января 2019

Я использую MockingContainer<T> для автоматической настройки моих зависимостей.Как я могу утверждать, что свойство на одной из этих зависимостей установлено?

[SetUp]
public void SetUp()
{
    //arrange
    _baseUrl = "http://baseUrl";
    _container = new MockingContainer<ApiInteractionService>();
    _container.Arrange<IConfigService>(m => m.BaseUrl).Returns(_baseUrl);
    _uut = _container.Instance;
}

Следующее не удается с 0 вызовами, что имеет смысл, так как я считаю, что он смотрит на Getter, а не Setter.Итак, как я могу утверждать, что Сеттер был вызван тестируемым устройством?

[Test]
public void BaseUrlSet()
{
    //act
    var _ = _uut.MakeRequest((InitialRequest) Arg.AnyObject);

    //assert     
    _container.Assert<IRestService>(m => m.BaseUrl, Occurs.Once());
}

Согласно документации (расположенной по адресу JustMock Docs для тех, кто не знаком, но хочет попробоватьОказывается, мне следует использовать Mock.ArrangeSet(lambda), однако я не могу понять, как заставить этот синтаксис работать в отношении MockingContainer<T>.

Если хуже становится хуже, я просто НЕ могу использовать MockingContainer<T>, но я бы предпочел не проводить рефакторинг моего набора тестов только для того, чтобы приспособить один конкретный модульный тест.


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

public ApiInteractionService(IRestService restService, IConfigService configService)
{
    _restService = restService;
    _restService.BaseUrl = configService.BaseUrl;
}

public string MakeRequest(InitialRequest initialRequest)
{
    return _restService.Post(initialRequest);
}

1 Ответ

0 голосов
/ 13 февраля 2019

Почему бы просто не утверждать, что BaseUrl имеет правильное значение в конце теста?

var baseUrl = _container.Get<IRestService>().BaseUrl;
Assert.AreEqual(baseUrl, _baseUrl);

Как указано в комментариях, _container.Assert<IRestService>(m => m.BaseUrl == _baseUrl) не будет работать.MockingContainer<T>.Assert утверждает ожидание, это не просто утверждение правды, как обычные утверждения.Правильный синтаксис был бы:

_container.AssertSet<IRestService>(restService => restService.BaseUrl = _baseUrl, Occurs.Once());

, но, как ни странно, в контейнере нет метода AssertSet.

...