Visual Studio WebAPI Moq 将存储库设置为 return 对象,return 空列表
Visual Studio WebAPI Moq Setup Repository to return object, return empty list
我正在用最小起订量编写网络API 单元测试。我一直在按照示例来模拟依赖项并将它们传递给调用存储库 api 的服务 api。我将 mockRepostory 设置为 return 一个包含 1 个对象的有效列表,但返回的是一个空列表。我查看了 mockRepository 设置,但不明白为什么它不起作用。
非常感谢任何帮助。谢谢
这是我的单元测试
[TestMethod]
public void GetUsers()
{
Mock<IUsersRespository> mockRepository = new Mock<IUsersRespository>();
var mockMapper = new Mock<IMapper>();
mockMapper.Setup(m => m.Map<User, Users>(It.IsAny<User>())).Returns(new Users());
mockMapper.Setup(m => m.Map<Users, User>(It.IsAny<Users>())).Returns(new User());
User mockUserRecord = new User{ UserId = 1, Title = "View Only", Description = "permission to view" };
var mockUserList = new List<Users>();
mockUserList.Add(new Users { UserId = 1, Title = "View Only", Description = "permission to view" });
Users request = new Users { UserId = 0, Title = "", Description = "" };
// here I setup the return object, but it not return that.
mockRepository.Setup(s => s.GetUsers(request)).Returns(mockUserList.AsEnumerable());
var mockUserService = new UsersService(mockRepository.Object, mockMapper.Object);
var result = mockUserService.GetUsers(new User { UserId = 0, Title = "", Description = "" });
// the Get call returns an empty list
mockUserService.Should().NotBeNull();
}
这是我的服务API
public IEnumerable<User> GetUsers(User request)
{
Users _request = mapper.Map<User, Users>(request);
var UserModel = UsersRespository.GetUsers(_request);
var UserViewModel = mapper.Map<IEnumerable<Users>, IEnumerable<User>>(UserModel);
return UserViewModel;
}
在你的设置中,你有这个
mockMapper.Setup(m => m.Map<User, Users>(It.IsAny<User>())).Returns(new Users()); // This seems ok
mockMapper.Setup(m => m.Map<Users, User>(It.IsAny<Users>())).Returns(new User()); // This seems to be where the issue is
您的服务正在映射到和来自 IEnumerable
:
var UserViewModel = mapper.Map<IEnumerable<Users>, IEnumerable<User>>(UserModel);
第二个模拟设置应该是
// T in "It.IsAny<T>()" should be the type of the local variable UserModel
mockMapper.Setup(m => m.Map<IEnumerable<Users>, IEnumerable<User>>(It.IsAny<???>())).Returns(new List<User> { User() } );
总而言之,这些是看起来不合时宜的东西:
Map
的通用参数不正确。
Map
的 return 值不正确
- 可能
Map
的输入参数不正确,但我无法从上面的代码中确认这一点。
我正在用最小起订量编写网络API 单元测试。我一直在按照示例来模拟依赖项并将它们传递给调用存储库 api 的服务 api。我将 mockRepostory 设置为 return 一个包含 1 个对象的有效列表,但返回的是一个空列表。我查看了 mockRepository 设置,但不明白为什么它不起作用。
非常感谢任何帮助。谢谢
这是我的单元测试
[TestMethod]
public void GetUsers()
{
Mock<IUsersRespository> mockRepository = new Mock<IUsersRespository>();
var mockMapper = new Mock<IMapper>();
mockMapper.Setup(m => m.Map<User, Users>(It.IsAny<User>())).Returns(new Users());
mockMapper.Setup(m => m.Map<Users, User>(It.IsAny<Users>())).Returns(new User());
User mockUserRecord = new User{ UserId = 1, Title = "View Only", Description = "permission to view" };
var mockUserList = new List<Users>();
mockUserList.Add(new Users { UserId = 1, Title = "View Only", Description = "permission to view" });
Users request = new Users { UserId = 0, Title = "", Description = "" };
// here I setup the return object, but it not return that.
mockRepository.Setup(s => s.GetUsers(request)).Returns(mockUserList.AsEnumerable());
var mockUserService = new UsersService(mockRepository.Object, mockMapper.Object);
var result = mockUserService.GetUsers(new User { UserId = 0, Title = "", Description = "" });
// the Get call returns an empty list
mockUserService.Should().NotBeNull();
}
这是我的服务API
public IEnumerable<User> GetUsers(User request)
{
Users _request = mapper.Map<User, Users>(request);
var UserModel = UsersRespository.GetUsers(_request);
var UserViewModel = mapper.Map<IEnumerable<Users>, IEnumerable<User>>(UserModel);
return UserViewModel;
}
在你的设置中,你有这个
mockMapper.Setup(m => m.Map<User, Users>(It.IsAny<User>())).Returns(new Users()); // This seems ok
mockMapper.Setup(m => m.Map<Users, User>(It.IsAny<Users>())).Returns(new User()); // This seems to be where the issue is
您的服务正在映射到和来自 IEnumerable
:
var UserViewModel = mapper.Map<IEnumerable<Users>, IEnumerable<User>>(UserModel);
第二个模拟设置应该是
// T in "It.IsAny<T>()" should be the type of the local variable UserModel
mockMapper.Setup(m => m.Map<IEnumerable<Users>, IEnumerable<User>>(It.IsAny<???>())).Returns(new List<User> { User() } );
总而言之,这些是看起来不合时宜的东西:
Map
的通用参数不正确。Map
的 return 值不正确- 可能
Map
的输入参数不正确,但我无法从上面的代码中确认这一点。