C# 在webapi中执行Moq时,为什么我的contentResult总是空的
我试图为WebApi单元测试设置Moq,但Assert.IsNotNull(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&
[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,您就得到了答案。@SteveTianqinGuovar contentResult=actionResult作为OkNegotiatedContentResult
您正在使用作为
来播放操作结果
<当强制转换失败时,代码>as将导致null。我会检查Get()
的返回类型,看看您的强制转换是否正确。我同意。什么是actionResult?.GetType().ToString()
就在您调用controller.Get()
之后?嘿,伙计们。请帮忙。我上传了我的Get action方法,首先添加一个http代码检查,如果是404,您就得到了答案。@SteveTianqinGuovar contentResult=actionResult作为OkNegotiatedContentResult代码>