Я пишу интеграционный тест, который проверяет загрузку файла на одну из моих конечных точек и проверяет правильность результата запроса!
Я использую 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());
}
Я надеюсь, что вы, ребята, сможете помочь мне (и, возможно, другим!) Здесь!





Ваш код выглядит правильно, за исключением того, что ключ в MultipartFormDataContent должен быть file, а не file.pdf
Измените данные формы на { fileStreamContent, "file", "file.pdf" }
Можете ли вы использовать такой инструмент, как Fiddler, и проверить, что на самом деле публикуется?