c# - 预期对模拟调用一次,但为 0 次 : No setups configured?

标签 c# moq xunit

我使用 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)

The following is the tested function. And ISearchRepository.GetSearchItems(5000, Filter) is called?

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

关于c# - 预期对模拟调用一次,但为 0 次 : No setups configured?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53070343/

相关文章:

unit-testing - 当测试挂起时如何停止 Visual Studio Test Runner

c# - 从 .Net 应用程序打开 Windows 7 帮助 (helpPane.exe)

c# - 从 char[] 缓冲区在 C# 中创建位图

c# - 使用最小起订量验证是否调用了抽象方法

c# - 起订量参数 TargetParameterCountException : Parameter count mismatch Exception

c# - 以下设置不匹配,使用 Moq 进行 WPF MVVM 单元测试

c# - ViewResult.StatusCode 为空,尽管已明确设置

javascript - 如何防止 Dynamics CRM 2015 在线索合格时创建机会?

c# - 在服务器上运行的差异

Matlab 从 XUnit 迁移到 Matlab 2013 单元测试