![](/img/trans.png)
[英]Unit Testing - Controller not picking up value from mocked IConfiguration in ASP.NET Core Web API Project
[英]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.