[frombody]数据绑定的写单元测试返回null C#

时间:2018-02-04 23:59:29

标签: c# unit-testing data-binding

我想为[frombody]数据绑定编写一个单元测试,在C#中返回null

所以我有这个型号:

 public class Model
    {
        public int number{ get; set; }
    }

这就是网络服务的行动:

  [HttpPost]
   public IActionResult API([FromBody]Model model)
   {     
      if (model== null)
      {
        return Json(new { error = "Could not decode request: JSON parsing failed" });
       }
     //some logic to get responsesToReturn;
     return Json(responsesToReturn);
   }

所以我使用内置的数据绑定来检查传入数据的有效性。如果客户端发送Json号:" abc",模型对象将数据绑定后变为null。 (因为" abc"不能转换为int)

所以我想为这个行为写一个单元测试。这是我目前的测试:

 [TestClass]
public class ModelControllerTest
{
    [TestMethod]
    public void TestAPIModelIsNull()
    {
        var controller = new ModelController();
        Model model = null;
        var result = controller.API(model);
        object obj = new { error = "Could not decode request: JSON parsing failed" };
        var expectedJson = JsonConvert.SerializeObject(obj);
        Assert.AreEqual(expectedJson, result);
    }
}

我一直收到System.NullReferenceException: Object reference not set to an instance of an object.错误。我猜是因为我明确地将模型设置为null,但该操作需要Model的实例。但是在应用程序中,当请求数据无效时,数据绑定会返回null。 那么问题是如何为[frombody]数据绑定返回null编写单元测试?

1 个答案:

答案 0 :(得分:2)

我找到了原因。这不是因为我无法将对象分配给null。这是因为当我运行测试时,控制器中的Response.StatusCode = 400会给我System.NullReferenceException因为测试控制器中的Reponsenull

所以我只是在我的测试控制器中设置Response,如下所示:

 [TestMethod]
    public void TestAPIShowInfoIsNull()
    {
        //arrange
        var controller = new ShowsInfoController();
        controller.ControllerContext = new ControllerContext();
        controller.ControllerContext.HttpContext = new DefaultHttpContext();
        var response = controller.ControllerContext.HttpContext.Response;
        //act
        ShowsInfo showsInfo = null;
        var result = controller.API(showsInfo);
        //assert

        Assert.AreEqual(400, response.StatusCode);
        Assert.IsInstanceOfType(result, typeof(JsonResult));
    }