2017-06-15 86 views
0

我有返回JsonResult控制器方法读取JSON字符串(命名空间:System.Web.Http.Results的ASP.NET Web API单元测试 - 从控制器返回JsonResult

 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的财产,调用甲基od正在返回嘲​​讽的回应。

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

回答

0

如果我理解正确的话,你需要像这样(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); 
0

您可以只投的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(); 
    }