Как смоделировать запрос multipart / form-data, используя Moq на .NET Core? - PullRequest
0 голосов
/ 21 июня 2019

У меня есть библиотека классов .NET Core для хранения больших двоичных объектов, которую я использую в веб-приложениях ASP.NET Core, и я хочу протестировать выставляемый контроллер.По независящим от меня причинам мне необходимо протестировать контроллер без использования HTTP-клиента, сервера тестирования или веб-приложения, поэтому я пытаюсь смоделировать запрос.Мне нужно смоделировать HTTP-запрос multipart / form-data для загрузки файла, чтобы проверить метод POST контроллера.

Я попытался выяснить, как смоделировать запрос из этой статьи: Как смоделировать запрос на контроллере в ASP.Net MVC? , но безрезультатно.

// Controller action
[HttpPost]
[DisableFormValueModelBinding]
public async Task<AttachedFile> Post()
{
    return await Request.WriteToFileStorage(service);
}
// Test with mocking
[Fact]
public async Task Post_New()
{
    // ...
    var controller = new FileStorageController(service);
    var content = Convert.FromBase64String(imageBase64);
    var request = new Mock<HttpRequest>();
    request.SetupGet(x => x.Headers).Returns(
        new HeaderDictionary { { "X-Requested-With", "XMLHttpRequest" } });
    request.SetupGet(x => x.ContentLength).Returns(1455);
    request.SetupGet(x => x.ContentType).Returns("multipart/form-data");
    request.SetupGet(x => x.Body).Returns(new MemoryStream(content));
    var httpContext = new Mock<HttpContext>();
    httpContext.SetupGet(x => x.Request).Returns(request.Object);
    controller.ControllerContext = new ControllerContext {
        HttpContext = httpContext.Object
    };

    var result = await controller.Post();
    // ...
}

Когда я пытаюсь каким-либо образом смоделировать объект запроса, тест не проходит, и яполучите исключение в тестовом проводнике, говорящее «Сообщение: System.IO.InvalidDataException: Отсутствует граница типа контента».Как правильно сформировать тело запроса?

...