2010-07-16 3 views
0

J'essaie d'unittest un téléchargement de fichier, mais semble manquer quelque chose.moqueuse Request.Files pour tester le téléchargement de fichier vide

Le contrôleur contient ce bloc assez standard dans le gestionnaire de HttpPost:

foreach (string file in Request.Files) { 
    var postedFile = Request.Files[file] as HttpPostedFileBase; 
    if (postedFile.ContentLength == 0) 
     continue; 
    var fileName = "~/Uploaded/" + Path.GetFileName(postedFile.FileName); 
    postedFile.SaveAs(Server.MapPath(fileName)); 
} 

Pour unittest J'utilise Moc:

var mock = new Mock<ControllerContext>(); 

mock.Setup(p => p.HttpContext.Request.Files.Count).Returns(0); 

// also tried unsuccessfully: 
// var collection = new Mock<HttpFileCollectionBase>(); 
// mock.Setup(p => p.HttpContext.Request.Files).Returns(collection.Object); 
// mock.Setup(p => p.HttpContext.Request.Files.AllKeys).Returns(new string[] {}); 

var controller = CreateReportsController(); 
controller.ControllerContext = mock.Object; 

Mon espoir était que le contexte moqué simulait une demande valide sans aucun téléchargement de fichier. Au lieu de cela, il échouera à l'instruction foreach avec une exception nullreference. Je peux voir pourquoi, puisque je n'ai pas réellement défini Request.Files mais je ne suis pas sûr de savoir comment faire mieux. Alors, comment est-ce que je configure correctement le contexte de moc?

Merci, Duffy

Répondre

Questions connexes