【问题标题】:C# - Unit Test for Json DataC# - Json 数据的单元测试
【发布时间】:2019-10-06 17:52:15
【问题描述】:

请问如何为 crud api 返回 Json 编写单元测试

    //Get all cli
    [HttpGet]
    public IHttpActionResult GetAllCli()
    {
      var data = db.cli.ToList();
      return Json(data);
    }


        // Post method for GetAllCli
    [HttpPost]
    public IHttpActionResult Post()
    {
           var pu = new client
            {
                FirstName = first,
                LastName = last,
                Address = addre,
            };
            db.cli.Add(pu);
            db.SaveChanges();
            return Json(new { StatusCode = "Success" });
    }

不知道该怎么做

    [TestMethod]
    public void GetAll_ShouldReturnAllCli()
    {
        var contrller = new CliController();

        var result = contrller.GetAllCli() as JsonResult;
        //result is null after this line
        //Is there a way to get result count of the json dat

        Assert.AreEqual(5, result);
    }

结果始终为空。 有没有办法得到json dat的计数结果

【问题讨论】:

  • 您能否更详细地描述您尝试了什么以及遇到问题的地方?
  • 添加测试方法
  • @NiangMoore 包括GetAllCli 动作的定义,而不仅仅是动作的主体。
  • @NiangMoore 如果没有minimal reproducible example 来阐明您的具体问题或其他细节以准确突出所做的工作,那么将很难重现问题以更好地理解实际问题。第一个 sn-p 不清楚。
  • @NiangMoore db 来自哪里?如果我们看不到代码,则无法提供太多帮助。

标签: c# asp.net-mvc visual-studio unit-testing


【解决方案1】:

Web API Json 方法中返回通用JsonResult<T>(来自System.Web.Http.Results)而不是JsonResult(来自System.Web.Mvc),这就是你在演员阵容中得到null的原因。为了转换为泛型类型,您应该使用匿名类型,而是为结果定义一个类

public class Result
{
    public string StatusCode { get; set; }
}

那么你的测试将如下所示

using System.Web.Http.Results;
//...

var contrller = new CliController();
var result = contrller.GetAllCli() as JsonResult<Result>;

【讨论】:

  • 结果仍然返回 null
  • @NiangMoore 你把这行return Json(new { StatusCode = "Success" });改成return Json(new Result { StatusCode = "Success" });了吗?
【解决方案2】:

如下更新您的测试方法,如果您只停留在获得计数,请在您的问题中添加更多描述,以明确您拥有什么以及您正在尝试做什么

[TestMethod]
    public void GetAll_ShouldReturnAllCli()
    {
        var contrller = new CliController();

        var result = contrller.GetAllCli() as JsonResult;
        var Originalresult = JsonHelper.GetJsonObjectRepresentation<IDictionary<string, object>>(result);


        Assert.AreEqual(5, Originalresult.count());
    }

【讨论】:

  • 这会返回 null var result = contrller.GetAllCli() as JsonResult;
  • 如果从浏览器调用,您会在控制器中获取数据吗?
猜你喜欢
  • 2019-04-26
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
  • 2010-09-12
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多