2016-04-26 18 views
5

ASP.NET Core 1'deki dosyaların yüklenmesi için testler yazmak istiyorum, ancak IFormFile'dan türetilen bir nesnenin taklit edilmesi/yorumlanması için iyi bir yol bulamıyor gibi görünüyor. Bunu nasıl yapacağınıza dair herhangi bir öneriniz var mı?ASP.NET Core 1 MVC 6'da bir birim/tümleştirme testi için bir IFormFile atama nasıl yapılır?

Teşekkürler.

+0

http://stackoverflow.com/help/how-to-ask – Kritner

+0

Taşma yığınına hoş geldiniz. Şimdiye kadar denediğiniz şeyin [En az, Tam ve Doğrulanabilir bir örnek nasıl oluşturulur?] (Http://stackoverflow.com/help/mcve) adresini okumalısınız. Bu şekilde insanlar sorunu yeniden üretmek ve daha iyi cevaplar vermek için kullanabilirler. – Nkosi

+0

Arabirimi alay etmek için alaycı bir çerçeve kullanabilir ve – Nkosi

cevap

10

.. Eğer böyle bir Kontrolörü var IFormFile.OpenReadStream() test edilen yöntemle erişilir

public class MyController : Controller { 
    public Task<IActionResult> UploadSingle(IFormFile file) {...} 
} 

... varsayarsak. Akış verisini simüle etmek için Moq alay çerçevesini kullanarak bir test oluşturabilirsiniz.

[TestClass] 
public class IFormFileUnitTests { 
    [TestMethod] 
    public async Task Should_Upload_Single_File() { 
     //Arrange 
     var fileMock = new Mock<IFormFile>(); 
     //Setup mock file using a memory stream 
     var content = "Hello World from a Fake File"; 
     var fileName = "test.pdf"; 
     var ms = new MemoryStream(); 
     var writer = new StreamWriter(ms); 
     writer.Write(content); 
     writer.Flush(); 
     ms.Position = 0; 
     fileMock.Setup(_ => _.OpenReadStream()).Returns(ms); 
     fileMock.Setup(_ => _.FileName).Returns(fileName); 
     fileMock.Setup(_ => _.Length).Returns(ms.Length); 

     var sut = new MyController(); 
     var file = fileMock.Object; 

     //Act 
     var result = await sut.UploadSingle(file); 

     //Assert 
     Assert.IsInstanceOfType(result, typeof(IActionResult)); 
    } 
} 
+1

@FreedomDeveloper'ın test için nasıl bir performans sergileyeceğini ayarlamak üzere ayarlamak için, 'fileMock.Setup (_ => _.Length) akışının uzunluğunu döndürmek için alandır. ms.Length) ' – Nkosi