2015-10-26 75 views
2

通常情况下,我嘲笑我的回购像这样:单元测试时,我如何模仿从异步方法返回null?

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)); 

但我得到一个编译错误。

回答

10

由于您返回的任务与async方法返回的类型不匹配,您会收到编译器错误。您应该返回Task<Member>而不是简单地Task<object>

repository.Setup(r => r.GetMemberAsync(email)).Returns(Task.FromResult<Member>(null)); 
+0

哇哦,如果它是一条蛇它会咬我。谢谢。 – ScubaSteve

+1

或者你可以强制'null'键入你想要的 - 'Task.FromResult((Member)null)'(在'FromResult'情况下不完全有用,但在类型更复杂时可能会很方便)。 –