Запрос насмешки. Файлы для проверки загрузки пустого файла. - PullRequest
0 голосов
/ 16 июля 2010

Я пытаюсь выполнить тестовую загрузку файла, но, похоже, что-то отсутствует.

Контроллер содержит этот довольно стандартный блок в обработчике 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));
}

В качестве тестового модуля я использую 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;

Я надеялся, что по умолчаниюконтекст будет имитировать действительный запрос без загрузки файла.Вместо этого произойдет сбой в операторе foreach с исключением нулевой ссылки.Я понимаю, почему, поскольку я на самом деле не установил Request.Files, но я не уверен, как это сделать лучше.

Итак, как мне правильно настроить контекст moc?

Спасибо,Duffy

1 Ответ

1 голос
/ 17 июля 2010

Вам необходимо создать автоматический рекурсивный макет:

var mock = new Mock<ControllerContext> { DefaultValue = DefaultValue.Mock };

Больше решений Moq доступно здесь: http://code.google.com/p/moq/wiki/QuickStart

...