Simon_Whale Ответов: 1

Iformfile тестирование свойства contenttype с помощью xunit


Интересно, может ли кто-нибудь помочь!

Я пытаюсь создать модульный тест с издевательствами над объектом IFormFIle как и в приведенном ниже коде

[Fact]
public void HasCorrectImageType()
{
    var formFile =  new Mock<IFormFile>();
    var PhysicalFile = new FileInfo(@"./Images/Dart 1.jpg");
    var memory = new MemoryStream();
    var writer = new StreamWriter(memory);
    writer.Write(PhysicalFile.OpenRead());
    writer.Flush();
    memory.Position = 0;
    var fileName = PhysicalFile.Name;

    formFile.Setup(_ => _.FileName).Returns(fileName);
    formFile.Setup(_ => _.Length).Returns(memory.Length);
    formFile.Setup(_ => _.OpenReadStream()).Returns(memory);
    formFile.Verify();

    var controller = new ScanController();
    var file = formFile.Object;

    var result = controller.Scan(file);
    Assert.IsAssignableFrom<OkObjectResult>(result);
}


Теперь, когда я тестирую это, он попадает на мой контроллер без каких-либо проблем, но мне нужно проверить, чтобы убедиться, что файл является "image/jpg" с помощью ContentType недвижимость в городе IFormFile параметр в моем методе контроллера, как я хочу, чтобы затем передать его в OCR Framework.

[HttpPost]
[ActionName("Scan File")]
[ProducesResponseType(200)]
public IActionResult Scan(IFormFile fileInfo)
{
    if (fileInfo == null) return BadRequest();
    if (fileInfo.ContentType == "image/jpg") return BadRequest();

    return Ok();
}


При пошаговом выполнении этого кода свойство ContentType всегда возвращает null при вызове через тесты XUnit.

Что я уже пробовал:

Если я попробую это сделать в Postman или Fiddler, вызов всегда будет корректно работать с текущей кодовой базой.

Я попытался установить свойство в "image/jpg", но это свойство является только геттером

Теперь я застрял / чешу голову.

Bohdan Stupak

У меня определенно нет ответа на ваш вопрос, но мне интересно, есть ли шанс, что вы могли бы написать тест уровня интеграции, просто напрямую загружая различные файлы, проверяя коды ответов и очищая вместо модульного тестирования эту функциональность.
В любом случае, хорошего вам дня.

Simon_Whale

Хорошая мысль, спасибо, я посмотрю на насмешку (извините за выбор слов) вместо этого

1 Ответов

Рейтинг:
9

Simon_Whale

Я хотел бы обновить это, чтобы кто-то другой мог получить ответ, если это необходимо.

Мне пришлось изменить процесс тестирования с модульного теста на интеграционный тест, я также включил код ниже

using (var stream = File.OpenRead(@"./Images/Dart 1.jpg"))
{
  var file = new FormFile(stream, 0, stream.Length, null, Path.GetFileName(@"./Images/Dart 1.jpg"))
  {
    Headers = new HeaderDictionary(),
    ContentType = "image/jpeg"
  };

  var controller = new ScanController();
  var result = controller.Scan(file);
  Assert.IsAssignableFrom<OkResult>(result);
}