C# 在webapi中执行Moq时,为什么我的contentResult总是空的

C# 在webapi中执行Moq时,为什么我的contentResult总是空的,c#,unit-testing,asp.net-web-api,moq,C#,Unit Testing,Asp.net Web Api,Moq,我试图为WebApi单元测试设置Moq,但Assert.IsNotNull(contentResult)总是失败。那是因为我错误地传递了模拟列表吗?请帮助我,代码如下 [TestMethod] public void GetCEO() { // setting up the mock framework var mockRepository = new Mock<IUsersRepository>(); List<Users&

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

 [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());
我的假期

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

    List<Users> GetCEOs();
}
公共接口IUsersRepository
{
列出用户(int主管);
列出getceo();
}

这是导致
as
强制转换失败并导致
null

actionResult as OkNegotiatedContentResult<IEnumerable<Users>>
actionResult作为OkNegotiatedContentResult
这是一个问题。根据您的编辑,您的方法定义如下

List<Users> GetCEOs();
列出GetCEOs();
有了这些,你就应该投给

actionResult as OkNegotiatedContentResult<List<Users>>
actionResult作为OkNegotiatedContentResult
是的,那是因为你的代码充满了错误。应该是这样的

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

  mockRepository
 .Setup(x => x.GetCEOs())
 .Returns(mockList);
List mockList=新列表()
{
新用户
{
用户=1,
FirstName=“TestFirstName”,
LastName=“TestLastName”,
Group=“首席执行官”
}
};
模拟存储库
.Setup(x=>x.GetCEOs())
.返回(模拟列表);

这是导致
as
强制转换失败并导致
null

actionResult as OkNegotiatedContentResult<IEnumerable<Users>>
actionResult作为OkNegotiatedContentResult
这是一个问题。根据您的编辑,您的方法定义如下

List<Users> GetCEOs();
列出GetCEOs();
有了这些,你就应该投给

actionResult as OkNegotiatedContentResult<List<Users>>
actionResult作为OkNegotiatedContentResult
是的,那是因为你的代码充满了错误。应该是这样的

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

  mockRepository
 .Setup(x => x.GetCEOs())
 .Returns(mockList);
List mockList=新列表()
{
新用户
{
用户=1,
FirstName=“TestFirstName”,
LastName=“TestLastName”,
Group=“首席执行官”
}
};
模拟存储库
.Setup(x=>x.GetCEOs())
.返回(模拟列表);

您正在使用
作为
来播放
操作结果
<当强制转换失败时,代码>as将导致null。我会检查
Get()
的返回类型,看看您的强制转换是否正确。我同意。什么是
actionResult?.GetType().ToString()
就在您调用
controller.Get()
之后?嘿,伙计们。请帮忙。我上传了我的Get action方法,首先添加一个http代码检查,如果是404,您就得到了答案。@SteveTianqinGuo
var contentResult=actionResult作为OkNegotiatedContentResult
您正在使用
作为
来播放
操作结果
<当强制转换失败时,代码>as将导致null。我会检查
Get()
的返回类型,看看您的强制转换是否正确。我同意。什么是
actionResult?.GetType().ToString()
就在您调用
controller.Get()
之后?嘿,伙计们。请帮忙。我上传了我的Get action方法,首先添加一个http代码检查,如果是404,您就得到了答案。@SteveTianqinGuo
var contentResult=actionResult作为OkNegotiatedContentResult