我正在尝试为.Net Core Web Api创建集成测试
但是我总是收到400错误的请求响应。我在下面分享详情
这是我的Controller方法
public IActionResult UpdateProductById([FromBody]int id, string description)
{
var result = ProductService.UpdateProductById(id, description);
if (result.Exception == null)
return Ok(result);
else
return BadRequest(result.Exception.Message);
}
这是我的测试课程(尝试发布)
[Fact]
public async Task UpdateProductById_Test_WithProduct()
{
var product = new
{
id = 1,
description = "foo"
};
var productObj= JsonConvert.SerializeObject(product);
var buffer = System.Text.Encoding.UTF8.GetBytes(productObj);
var byteContent = new ByteArrayContent(buffer);
byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var result = await _tester.Client.PostAsync("/api/1.0/UpdateProductById", byteContent);
result.StatusCode.Should().Be(HttpStatusCode.OK);
}
答案 0 :(得分:2)
测试正在发送请求正文中的所有内容,但该操作仅绑定id
。该说明很可能为空,并导致更新出现问题。
创建一个模型来保存数据
public class ProductModel {
public int id { get; set; }
public string description { get; set; }
}
重构操作以从请求的正文中获取内容
[HttpPost]
public IActionResult UpdateProductById([FromBody]ProductModel model) {
if(ModelState.IsValid) {
var result = ProductService.UpdateProductById(model.id, model.description);
if (result.Exception == null)
return Ok(result);
else
return BadRequest(result.Exception.Message);
}
return BadRequest(ModelState);
}