我尝试使用Moq对我的网络服务进行单元测试,我有以下测试:
[TestMethod()]
public void GetCoursesTest()
{
var response = _coursesController.GetCourses();
var contentResult = response as OkNegotiatedContentResult<List<Course>>;
Assert.AreEqual(contentResult.Content.Count(), _educationCoursesData.Count);
}
此处GetCourses()
为:
public IHttpActionResult GetCourses()
{
try
{
return Ok(_entities.Courses.ToList().Select(course => new CourseDTO
{
Id = course.Id,
CrsName = course.CrsName,
CrsHour = course.CrsHour,
CrsDay = course.CrsDay,
CrsMin = course.CrsMin,
Teacher = course.Teacher
}));
}
catch
{
return InternalServerError();
}
}
所以它的结果是一个obejcts列表。但是,当我尝试通过contentResult
将这些对象列表抓取到response as OkNegotiatedContentResult<List<Course>>;
时,contentResult
只是null
。如何将OkResult中的对象列表读入我可以Count()
开的变量?
答案 0 :(得分:0)
如果<{p>}之后contentResult
为空
var contentResult = response as OkNegotiatedContentResult<List<Course>>;
演员失败了。原因是你早期使用.ToList()。使用.Select(...)
即表示您正在创建IEnumerable
而不是List
。试试这个:
return Ok(_entities.Courses.Select(course => new CourseDTO
{
Id = course.Id,
CrsName = course.CrsName,
CrsHour = course.CrsHour,
CrsDay = course.CrsDay,
CrsMin = course.CrsMin,
Teacher = course.Teacher
})ToList());
或者将演员阵容改为
OkNegotiatedContentResult<IEnumerable<Course>>;
答案 1 :(得分:0)
由于未枚举内容,因此测试中的方法未返回OkNegotiatedContentResult<List<Course>>
。在返回数据之前,更改预期的返回类型(OkNegotiatedContentResult<IEnumerable<Course>>
)或更新操作以枚举collect(.ToList()
)。