Как выполнить интеграционный тест на моей конечной точке API-интерфейса ядра Asp.Net, куда я загружаю файл? - PullRequest
0 голосов
/ 23 ноября 2018

Я пишу интеграционный тест, который проверяет загрузку файла на одну из моих конечных точек и проверяет правильность результата запроса!

Я использую IFormFile в моем контроллере для получения запроса,но я получаю запрос 400 Bad, потому что, очевидно, мой файл пуст.

Как разрешить интеграционному тесту отправлять файл на мою конечную точку?Я нашел этот пост , но в нем говорится только о насмешке IFormFile, а не об интеграционном тесте.


Мой контроллер:

[HttpPost]
public async Task<IActionResult> AddFile(IFormFile file)
{
   if (file== null)
   {
       return StatusCode(400, "A file must be supplied");
   }

   // ... code that does stuff with the file..

   return CreatedAtAction("downloadFile", new { id = MADE_UP_ID }, { MADE_UP_ID };
}

Мой интеграционный тест:

public class IntegrationTest:
    IClassFixture<CustomWebApplicationFactory<Startup>>
{
    private readonly CustomWebApplicationFactory<Startup> _factory;

    public IntegrationTest(CustomWebApplicationFactory<Startup> factory)
    {
        _factory = factory;
    }

    [Fact]
    public async Task UploadFileTest()
    {
        // Arrange
        var expectedContent = "1";
        var expectedContentType = "application/json; charset=utf-8";

        var url = "api/bijlages";
        var client = _factory.CreateClient();

        // Act
        var file = System.IO.File.OpenRead(@"C:\file.pdf");
        HttpContent fileStreamContent = new StreamContent(file);

        var formData = new MultipartFormDataContent
        {
            { fileStreamContent, "file.pdf", "file.pdf" }
        };

        var response = await client.PostAsync(url, formData);

        fileStreamContent.Dispose();
        formData.Dispose();

        response.EnsureSuccessStatusCode();

        var responseString = await response.Content.ReadAsStringAsync();

        // Assert
        Assert.NotEmpty(responseString);
        Assert.Equal(expectedContent, responseString);
        Assert.Equal(expectedContentType, response.Content.Headers.ContentType.ToString());
    }

Я надеюсь, что вы, ребята, можете помочь мне (и, возможно, другим!) Здесь!

1 Ответ

0 голосов
/ 23 ноября 2018

Ваш код выглядит правильно, за исключением того, что ключ в MultipartFormDataContent должен быть file, а не file.pdf

Измените данные формы на { fileStreamContent, "file", "file.pdf" }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...