获取OkResult中的对象列表

时间:2017-05-21 10:01:19

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

我尝试使用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()开的变量?

2 个答案:

答案 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())。