我需要一个测试方法的帮助我试着写...
我需要测试用户是否可以显示他的个人资料,但是当我尝试使用我的模拟GetProfileFromUserName方法时遇到错误.方法返回null.我不明白的是,我有一个名为GetEmail的类似方法,它基本上做同样的工作.
这是检索配置文件的代码,它不起作用:
mockUserRepository.Setup(gp => gp.GetProfileFromUserName(userProfile.UserName)).Returns(new Profile { ProfileID = userProfile.ProfileID });
Run Code Online (Sandbox Code Playgroud)
这是用于检索电子邮件的代码,该代码有效.
mockUserRepository.Setup(em => em.GetEmail(new MockIdentity("JohnDoe").Name)).Returns("johndoe@gmail.com");
Run Code Online (Sandbox Code Playgroud)
这是模拟调用的方法的片段,并返回null而不是配置文件:
public ActionResult ShowProfile()
{
var profile = _userRepository.GetProfileFromUserName(User.Identity.Name);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?如果我将GetProfileFromUserName中的userProfile.UserName替换为It.IsAny();
Max*_*kin 14
如果它返回null,则表示您Setup
与实际调用不匹配.检查Setup行中userProfile.UserName
是否包含正确的值.
此外,要检测不匹配的呼叫,请mockUserRepository
使用该MockBehavior.Strict
选项创建.
希望这可以帮助.
在我的情况下,错误是用错误的签名初始化对象,即使代码被编译:
错误(参数类型为int):
_mockEntityServices.Setup(x => x.GetEntities(It.IsAny<int>()))
.Returns(new List<Entity>());
Run Code Online (Sandbox Code Playgroud)
正确(参数类型是int?):
_mockEntityServices.Setup(x => x.GetEntities(It.IsAny<int?>()))
.Returns(new List<Entity>());
Run Code Online (Sandbox Code Playgroud)
模拟方法的签名:
public IList<Entity> GetEntities(int? parentEntityId)
Run Code Online (Sandbox Code Playgroud)