2009-11-24 138 views
10

我需要一个TestMethod的我尝试写帮助...Moq-mocked方法为什么返回null?

我需要测试,用户可以显示他的个人资料,不过,我遇到一个错误,当我尝试使用我的嘲笑GetProfileFromUserName方法。这些方法返回null。我不明白的是,我有一个名为GetEmail的类似方法,它基本上做了相同的工作。

这是获取配置文件中的代码,它不工作:

mockUserRepository.Setup(gp => gp.GetProfileFromUserName(userProfile.UserName)).Returns(new Profile { ProfileID = userProfile.ProfileID }); 

这是提取电子邮件,其工作代码。

mockUserRepository.Setup(em => em.GetEmail(new MockIdentity("JohnDoe").Name)).Returns("[email protected]"); 

这是模拟电话并返回null而非个人资料的方法的一个片段:

public ActionResult ShowProfile() 
    { 
     var profile = _userRepository.GetProfileFromUserName(User.Identity.Name); 

我到底做错了什么?如果我将GetProfileFromUserName中的userProfile.UserName替换为It.IsAny();

+0

如果使用'It.IsAny ()',会发生什么? – 2009-11-24 12:21:50

回答

11

如果它返回null,这意味着您的Setup与实际呼叫不匹配。检查userProfile.UserName在设置行处包含正确值

此外,要检测不匹配的呼叫,请使用MockBehavior.Strict选项创建mockUserRepository

希望这会有所帮助。

+0

它发生在我身上,我正在使用隐式转换运算符,因此编译的方法但moq与该调用不匹配。 – 2016-04-13 15:05:34

0

对于任何人谁试图返回一个对象,这并不在测试设置(“安排”)的时间存在,解决的办法是使用委托(Func键<>)过载:

mockUserRepository.Setup(gp => gp.GetProfileFromUserName(userProfile.UserName)) 
    .Returns(() => new Profile { ProfileID = userProfile.ProfileID });