在 webapi 中做 Moq 时,为什么我的 contentResult 总是 null

When doing Moq in webapi, why my contentResult is always null

我试图为 WebApi 单元测试设置起订量,但 Assert.IsNotNull(contentResult) 总是失败。那是因为我错误地传递了我的 mockList 吗?请帮助我,代码如下

 [TestMethod]
  public void GetCEO()
    {

      // setting up the mock framework
      var mockRepository = new Mock<IUsersRepository>();
      List<Users> mockList = new List<Users>();
      {
          new Users
          {
              User = 1,
              FirstName = "TestFirstName",
              LastName = "TestLastName",
              Group = "CEO"
          };
      }
      mockRepository
     .Setup(x => x.GetCEOs())
     .Returns(mockList);

     var controller = new UsersController(mockRepository.Object);

     IHttpActionResult actionResult = controller.Get();
     var contentResult = actionResult as OkNegotiatedContentResult<IEnumerable<Users>>;
     Assert.IsNotNull(mockList);
     Assert.IsNotNull(contentResult);
     Assert.IsNotNull(contentResult.Content);
     var users = contentResult.Content;
     Assert.AreEqual(1, users.Count());

}

请检查我的获取操作方法

 [HttpGet]
    [Route("api/GetCEO")]
    public IHttpActionResult Get()
    {
        var data=_repository.GetCEOs();
        if (data == null)
            return NotFound();
        else
        return Ok(data);

    }

我的 IusersRepositoy

    public interface IUsersRepository
{
    List<Users> GetUsers(int supervisor);

    List<Users> GetCEOs();
}

这是因为 as 转换失败并导致 null

actionResult as OkNegotiatedContentResult<IEnumerable<Users>>

有问题。根据您的编辑,您的方法定义如下

List<Users> GetCEOs();

有了它你应该转换为

actionResult as OkNegotiatedContentResult<List<Users>>

是的,那是因为您的代码充满了错误。应该像下面这样

  List<Users> mockList = new List<Users>()
  {
      new Users
      {
          User = 1,
          FirstName = "TestFirstName",
          LastName = "TestLastName",
          Group = "CEO"
      }
  };

  mockRepository
 .Setup(x => x.GetCEOs())
 .Returns(mockList);