Я пытаюсь выполнить модульное тестирование моего метода HTTP POST моего контроллера API .Net CORE 2.0, который выполняет потоковое чтение данных ... Невозможно использовать подход типа "модель" в качестве исходных данных входящего потока.
Вот основы метода контроллера.
[HttpPost()]
[Authorize(Roles = "contributor")]
public async Task<IActionResult> SubmitReport()
{
IActionResult result = null;
_logger.LogInformation("POST Request");
var buffer = new byte[this.Request.ContentLength.Value];
await this.Request.Body.ReadAsync(buffer, 0, buffer.Length);
string content = System.Text.Encoding.UTF8.GetString(buffer);
// Do something with the 'content'
return (Accepted()); // Assuming all was OK
}
А вот мой юнит-тест ... или, точнее, насколько я могу получить ..
[TestMethod]
public void eFormController_SubmitReport_MockService_ExpectHttpStatusAccepted()
{
var mockContextAccessor = new Mock<IHttpContextAccessor>();
var context = new DefaultHttpContext();
mockContextAccessor.Setup(x => x.HttpContext).Returns(context);
var mockLogger = new Mock<ILogger<object>>();
var ctrl = new Controllers.eFormsController();
var result = ctrl.SubmitReport();
Assert.IsInstanceOfType(result, typeof(Microsoft.AspNetCore.Mvc.AcceptedResult));
}
Когда я запускаю теств его нынешнем виде свойство this.Request
равно null
, поэтому как мне смоделировать правильный HTTP-запрос POST.
Google еще не дал каких-либо благоприятных результатов, поскольку все они предполагают полностью определенную модель, а не текстовый поток