簡體   English   中英

預期在模擬上調用一次,但被調用0次:沒有配置任何設置?

[英]Expected invocation on the mock once, but was 0 times: No setups configured?

我有以下使用Moq xunit測試。

[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);
}

您的函數正在創建自己的過濾器:

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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM