Moq - 无法从 x 转换为 System.Func<x>

Moq - Unable to Convert from x to System.Func<x>

我正在尝试模拟这个方法:

 public JsonSerializerSettings createSerializerSettingsUsingRequest(Request request)
        {

            var serializerSettings = new JsonSerializerSettings()
            {
                ContractResolver = new Utilities.CustomContractResolver(false, request.text)
            };
            return serializerSettings;
        }

这就是我的嘲笑方式:

 _service = new Mock<IService>();
 _service.Setup(x => x.createSerializerSettingsUsingRequest(It.IsAny<Request>()))
                                .Returns<JsonSerializerSettings>(new JsonSerializerSettings { ContractResolver = new Utilities.CustomContractResolver(false, null) });

但是错误显示

cannot convert from 'Newtonsoft.Json.JsonSerializerSettings' to System.Func<Newtonsoft.Json.JsonSerializerSettings, Newtonsoft.Json.JsonSerializerSettings>

有人知道如何正确模拟它吗?

删除通用参数。您尝试调用的重载并没有按照您的想法执行。

var settings = new JsonSerializerSettings { 
    ContractResolver = new Utilities.CustomContractResolver(false, null) 
};
_service
    .Setup(x => x.createSerializerSettingsUsingRequest(It.IsAny<Request>()))
    .Returns(settings);

如果您试图复制原始方法的行为,则可以访问传递的参数。

例如

_service
    .Setup(x => x.createSerializerSettingsUsingRequest(It.IsAny<Request>()))
    .Returns<Request>(request => new JsonSerializerSettings { 
        ContractResolver = new Utilities.CustomContractResolver(false, request.text) 
    });