【问题标题】:A little issue with testing an ActionResult that returns a Json测试返回 Json 的 ActionResult 的一个小问题
【发布时间】:2015-08-17 05:36:41
【问题描述】:

我有一个像这样的 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);

即使我尝试单步执行该方法,控制器也根本没有执行。

“学生”对象为空。

我做错了什么?

提前致谢。

【问题讨论】:

    标签: asp.net-mvc unit-testing


    【解决方案1】:

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

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

    当您从控制器调用时,值为 true。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      相关资源
      最近更新 更多