Как создать экземпляр FormFile на С# без Moq?

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

Очевидно, я не могу создать экземпляр из интерфейса, поэтому я попытался создать экземпляр FormFile, который наследуется от интерфейса IFormFile.

using (var stream = File.OpenRead("placeholder.pdf"))
{
    var file = new FormFile(stream, 0, stream.Length, null, Path.GetFileName(stream.Name))
    {
        ContentType = "application.pdf"
    };
}

Но это вызывает следующую ошибку:

System.NullReferenceException: Object reference not set to an instance of an object.
   at Microsoft.AspNetCore.Http.Internal.FormFile.set_ContentType(String value)

Когда я удаляю ContentType = "application.pdf" из кода, это позволяет мне создать новый экземпляр, но без ContentType.

Как мне создать экземпляр FormFile с ContentType и без Moq фреймворка?


person Tom Aalbers    schedule 06.08.2018    source источник
comment
без фреймворка Moq С помощью другого фреймворка? Честно говоря, почему вы не хотите использовать moq в своей тестовой среде? Он разработан именно для этой цели.   -  person HimBromBeere    schedule 06.08.2018
comment
Ах извини мой плохой. Это интеграционный тест. Обновленный вопрос.   -  person Tom Aalbers    schedule 06.08.2018
comment
Он довольно низкоуровневый, он требует, чтобы вы сначала установили свойство Headers. docs.microsoft.com/ en-us/dotnet/api/   -  person Hans Passant    schedule 06.08.2018


Ответы (1)


Благодаря Гансу его комментарий, фактический ответ:

using (var stream = File.OpenRead("placeholder.pdf"))
{
    var file = new FormFile(stream, 0, stream.Length, null, Path.GetFileName(stream.Name))
    {
        Headers = new HeaderDictionary(),
        ContentType = "application/pdf"
    };
}
person Devator    schedule 12.10.2018
comment
Мне просто нужно добавить, что тот факт, что это ответ и что ContentType имеет как Get, так и Set NullReferenceExceptions, делает FormFile мусорным объектом и шаблоном. - person Captain Prinny; 10.10.2019
comment
я искал это. Это работает, спасибо! - person Mesut Başaran; 27.01.2021
comment
Сработало, спасибо! Не ясно из исключения, хотя - person Eldar Scott; 12.04.2021