【问题标题】:When doing Moq in webapi, why my contentResult is always null在 webapi 中做 Moq 时,为什么我的 contentResult 总是为空
【发布时间】:2017-04-17 19:05:54
【问题描述】:

我试图为 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 投射actionResultas 将在强制转换失败时返回 null。我会检查 Get() 的返回类型,看看你的演员表是否正确。
  • 我同意。在您拨打controller.Get() 之后,actionResult?.GetType().ToString() 是什么?
  • 嘿,伙计们。请帮忙。我上传了我的 Get 操作方法
  • 先添加对 http 代码的检查,如果是 404 你就知道了。
  • @SteveTianqinGuo var contentResult = actionResult as OkNegotiatedContentResult&lt;List&lt;Users&gt;&gt;;

标签: c# unit-testing asp.net-web-api moq


【解决方案1】:

这导致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);

【讨论】:

    猜你喜欢
    • 2013-04-17
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 2013-03-15
    • 2017-06-27
    • 1970-01-01
    相关资源
    最近更新 更多