【问题标题】:ASP.NET Web API Unit Testing - Read Json string from controller returning JsonResultASP.NET Web API 单元测试 - 从返回 JsonResult 的控制器中读取 Json 字符串
【发布时间】:2017-06-15 07:18:27
【问题描述】:

我有一个返回 JsonResult 的控制器方法(命名空间:System.Web.Http.Results )

        public async Task<IHttpActionResult> GetConfig(string section, string group, string name)
        {
            var configurations = await _repository.GetConfig(section, group, name);
            return Json(new { configurations = configurations.ToList() }, SerializerSettings);
        }

我正在尝试对这个方法进行单元测试。这是我目前所拥有的

        [Test]
        public async void Should_Return_List_Of_Configs_Json()
        {
            var section= "ABC";
            var group= "some group";
            var name= "XYZ";
            var response =  await controller.GetConfig(section, group, name);
            Assert.IsNotNull(response);

        }

我无法从上述方法中读取Json 字符串,因为我看不到response.Content 属性。对该方法的调用正在返回模拟响应。

有人可以帮我解决这个问题吗?

【问题讨论】:

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


    【解决方案1】:

    如果我理解正确,您需要这样的东西 (source):

    var response = await controller.GetConfig(section, group, name);
    var message = await response.ExecuteAsync(CancellationToken.None);
    var content = await message.Content.ReadAsStringAsync();
    Assert.AreEqual("expected value", content);
    

    【讨论】:

      【解决方案2】:

      您可以在单元测试中将 IHttpActionResult 转换为适当的 JsonResult。您在示例中使用的匿名类型应替换为 DTO 类型,因此您可以在单元测试中正确转换它。这样的事情应该这样做

          [Test]
          public async void Should_Return_List_Of_Configs_Json()
          {
              var section= "ABC";
              var group= "some group";
              var name= "XYZ";
              var response =  (JsonResult<List<YourDtoType>>)await controller.GetConfig(section, group, name);
              Assert.IsNotNull(response);
      
          }
      

      第二种可能性是从 Api 控制器而不是 IHttpActionResult 返回实际类型。就这样

          public async Task<List<YourDtoType>> GetConfig(string section, string group, string name)
          {
              var configurations = await _repository.GetConfig(section, group, name);
              return configurations.ToList();
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多