在单元测试时,我如何模拟从异步方法返回null
本文关键字:模拟 异步方法 null 返回 单元测试 何模拟 | 更新日期: 2023-09-27 18:19:25
通常,我是这样嘲笑我的repo的:
var repository = new Mock<ISRepository>();
repository.Setup(r => r.GetMemberAsync(email))
.Returns(Task.FromResult(new Member
{
FirstName = firstName,
LastName = lastName
}));
但是,在我的代码中,我检查是否没有找到成员,即GetMemberAsync返回null。我该怎么嘲笑呢?
我试着:
var repository = new Mock<ISRepository>();
repository.Setup(r => r.GetMemberAsync(email))
.Returns(Task.FromResult<object>(null));
但是我得到一个编译错误
您会得到一个编译器错误,因为您返回的任务与异步方法返回的类型不匹配。您应该返回Task<Member>
而不是简单地返回Task<object>
:
repository.Setup(r => r.GetMemberAsync(email)).Returns(Task.FromResult<Member>(null));
也可以不使用Task类返回结果。
repository
.Setup(r => r.GetMemberAsync(email))
.ReturnsAsync((Member)null);
老问题但是你也可以这样做,我认为这样更简洁:
假设你的对象的默认值是null,你也可以使用:
default(<insert object type here>)
。
default(Member)
default(List<string>)
etc.
完整的示例:
var myRepo = new Mock<IMyRepo>();
myRepo
.Setup(p => p.GetAsync("name"))
.ReturnsAsync(default(List<string>));