首页 > 解决方案 > .Net 中的最小起订量,带 2 个参数

问题描述

我正在尝试创建一个 Mock 来运行我的测试,但我收到以下错误,“无效的回调。具有 2 个参数的方法上的设置无法使用不同数量的参数 (1) 调用回调”这是我的设置函数

  private void Setup()
    {
        this.dataFactoryMock = new Mock<CommonDataFactory>();
        var commonDataFactory = new CommonDataFactory();
        this.dataFactoryMock.Setup(factory => factory.Factory(It.IsAny<DateTime>(), It.IsAny<DateTime>())).Returns<DateTime>(date => commonDataFactory.Factory(date, date));
    }

public class CommonDataFactory
{
    public virtual CommonData Factory(DateTime adjustedAnalysisDate, DateTime analysisDate)
    {            
        var downloadCommonData = CommonData.DownloadCommonData(adjustedAnalysisDate, analysisDate);
        this.cache.Add(key, downloadCommonData, new CacheItemPolicy());
        return downloadCommonData;
    }
}

如果我在工厂中只使用一个参数,它就可以正常工作。有人可以帮忙吗?

标签: c#unit-testingmoq

解决方案


Returns需要匹配设置中使用的匹配器数量的表达式

设置中有两个日期时间参数匹配器,因此需要在返回表达式中使用两个。

this.dataFactoryMock
    .Setup(factory => factory.Factory(It.IsAny<DateTime>(), It.IsAny<DateTime>()))
    .Returns((DateTime adjustedAnalysisDate, DateTime analysisDate) => 
        commonDataFactory.Factory(adjustedAnalysisDate, analysisDate)
    );

推荐阅读