簡體   English   中英

ASP.NET Web API單元測試-從返回JsonResult的控制器讀取Json字符串

[英]ASP.NET Web API Unit Testing - Read Json string from controller returning JsonResult

我有一個控制器方法,它返回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屬性。對該方法的調用返回了模擬的響應。

有人可以幫我這個忙嗎?

如果我正確理解,則需要這樣的內容( ):

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);

您可以在單元測試中將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();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM