通常情况下,我这样嘲笑我的回购:
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));
但是我收到了编译错误。
答案 0 :(得分:23)
您收到编译器错误,因为您返回的任务与async方法返回的类型不匹配。您应该返回Task<Member>
而不是简单地Task<object>
:
repository.Setup(r => r.GetMemberAsync(email)).Returns(Task.FromResult<Member>(null));
答案 1 :(得分:9)
也可以不使用Task类而返回结果。
repository
.Setup(r => r.GetMemberAsync(email))
.ReturnsAsync((Member)null);
答案 2 :(得分:0)
古老的问题,但您也可以这样做,我认为它更干净:
假设您对象的默认值为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>));