Ожидаемый вызов на макете один раз, но был 0 раз: Нет настроек? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть следующий тест xunit с использованием Moq.

[Fact]
public void Presenter_Filter_ShouldFilterViewSearchList()
{
    var mockView = Mock.Get(mockSearchView);
    mockView.Setup(v => v.Ids).Returns("123");
    presenter.Filter();
    var mockRepo = Mock.Get(mockSearchRepository);
    Filter filter = new Filter { Ids = new List<string> { "123" } };
    mockRepo.Verify(r => r.GetSearchItems(5000, filter), Times.Once);
}

И проверка не прошла со следующими сообщениями.

Expected invocation on the mock once, but was 0 times: r => r.GetSearchItems(5000, Filter)
No setups configured.

Performed invocations: 
ISearchRepository.GetSearchItems(5000)
ISearchRepository.GetSearchItems(5000, Filter)

Ниже приводится проверенная функция. А ISearchRepository.GetSearchItems(5000, Filter) называется?

public void Filter()
{
    var filter = new Filter {
        Name = _view.Name,
        Ids = _view.Ids?.Split(',').Select(x => x.Trim()).ToList(),
        Countries = _view.Countries?.Split(',').Select(x => x.Trim()).ToList(),
        Region = _view.Region,
    };
    _repository.GetSearchItems(5000, filter);
}

1 Ответ

0 голосов
/ 30 октября 2018

Ваша функция создает свой собственный фильтр:

var filter = new Filter {
    Name = _view.Name,
    Ids = _view.Ids?.Split(',').Select(x => x.Trim()).ToList(),
    Countries = _view.Countries?.Split(',').Select(x => x.Trim()).ToList(),
    Region = _view.Region,
};

Вы настраиваете тест с другим экземпляром фильтра:

Filter filter = new Filter { Ids = new List<string> { "123" } };
mockRepo.Verify(r => r.GetSearchItems(5000, filter), Times.Once);

Если вы хотите проверить вызов, передаваемый объект должен быть тем же объектом.

В противном случае настройте его для использования любого объекта Filter для вызова:

 mockRepo.Verify(r => r.GetSearchItems(5000, It.IsAny<Filter>()), Times.Once);

Или передать фильтр в качестве аргумента функции:

public void Filter(Filter filter) 
{
    _repository.GetSearchItems(5000, filter);
}
...