测试返回Json的ActionResult有点小问题

时间:2015-08-17 05:36:42

标签: asp.net-mvc unit-testing

我有一个像这样的ActionResult:

public ActionResult AddDoc(StudentModel studentModel)
{

    var student = _studentHelper.GetStudent(studentModel, true);

    _updateStudentManager.UpsertStudent(student);

    return Json(new { result = true });
}

测试方法:

[TestMethod]
public void Calling_AddDoc_Returns_JsonResult()
{
    var studentModel = new StudentModel()
    {
        Name = "Jon",
        Id = "1"
    };

    var studentToAdd = new Student()
    {
        StudentId = "1",
        Name = "Jon",
        Course = "SomeCourse"
    };

    _studentHelper.Setup(x => x.GetStudent(studentModel, false)).Returns(studentToAdd);
    var res = _controller.AddDoc(studentModel) as JsonResult;

    Assert.AreEqual("{ result = True }", res.Data.ToString());
}

GetStudent()只是将传入的对象映射到Student的新实例并返回它。

测试因System.NullReferenceException'

而失败

调试TestMethod显示此行

    var student = _studentHelper.GetStudent(studentModel, true);
即使我试图单步进入方法,控制器中的

也根本没有执行。

'学生' object为null。

我做错了什么?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您的设置调用有错误。此调用期望第二个参数为false。

_studentHelper.Setup(x => x.GetStudent(studentModel, false)).Returns(studentToAdd);

当您从控制器呼叫时,值为true。

var student = _studentHelper.GetStudent(studentModel, true);

你可能正在使用Moq的松散行为,使其返回null。