首页 问答 Moq Mock 时总是报错 "Unsupported expression"
问题详情

下面的 C# mock 代码,编译通过,但运行时总是报错

var redisDatabaseMock = new Mock<IRedisDatabase>();
redisDatabaseMock
    .Setup(x => x.GetOrCreateAsync(
        It.IsAny<string>(),
        It.IsAny<TimeSpan>(),
        It.IsAny<Func<Task<UserDto>>>()))
    .Returns(async (Func<Task<UserDto>> func) => await func());
var redisClientMock = new Mock<IRedisClient>();
redisClientMock
    .Setup(x => x.GetDefaultDatabase())
    .Returns(redisDatabaseMock.Object);
var redisClientFactoryMock = new Mock<IRedisClientFactory>();
redisClientFactoryMock
    .Setup(x => x.GetRedisClient(It.IsAny<string>()))
    .Returns(redisClientMock.Object);
var result = await redisClientFactoryMock.Object
    .GetRedisClient("default")
    .GetDefaultDatabase()
    .GetOrCreateAsync("test", TimeSpan.FromSeconds(10), () => Task.FromResult(new UserDto("Cnblogs")));
Console.WriteLine(result);
public record UserDto(string Name);

错误信息如下

Unhandled exception. System.NotSupportedException: Unsupported expression: x => x.GetOrCreateAsync<UserDto>(It.IsAny<string>(), It.IsAny<TimeSpan>(), It.IsAny<Func<Task<UserDto>>>(), When.Always, CommandFlags.None)

回答

GetOrCreateAsync 是扩展方法,Moq 不支持 mock 扩展方法

版权:言论仅代表个人观点,不代表官方立场。转载请注明出处:https://www.stntk.com/question/2518.html

发表评论
暂无评论

还没有评论呢,快来抢沙发~

点击联系客服

在线时间:8:00-16:00

客服QQ

70068002

客服电话

400-888-8888

客服邮箱

70068002@qq.com

扫描二维码

关注微信公众号

扫描二维码

手机访问本站