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

总而言之,这些是看起来不合时宜的东西:

  1. Map 的通用参数不正确。
  2. Map 的 return 值不正确
  3. 可能 Map 的输入参数不正确,但我无法从上面的代码中确认这一点。