Как модульно протестировать метод, который получает FormCollection для загрузки файла?

StackOverflow https://stackoverflow.com/questions/2327263

Вопрос

Я хочу провести модульное тестирование метода, подобного следующему:

public ActionResult StoreFile(FormCollection form, string _paginaAtual)
{
     Session["MySession"] = 1
     if (Request.Files["uploadedFiles"] != null)
         {
             //do something about the file
         }
     return View()
}

Он находится внутри моего класса контроллера "someController.cs" и вызывается, когда пользователь отправляет файл с простым типом ввода ="file" HTML input.

P.S.:Пуристы, будьте осторожны:Я ЗНАЮ, что это не "чистое" модульное тестирование, я просто хочу вызвать метод в тестовой среде и проверить, вносит ли он желаемые изменения в систему.

Спасибо всем за любой вклад в тему, Рысь.

Это было полезно?

Решение

К счастью, команда ASP.Net подумала об этом до того, как они начали работать с MVC и создали пространство имен System.Web.Abstractions.Это серия базовых классов, которые отражают статические классы, которые невозможно протестировать традиционно, как класс HttpWebRequest.

Что вы хотите сделать, так это положиться на один из этих базовых классов и немного внедрить зависимости, чтобы эффективно имитировать ваш сеанс.

HttpSessionStateBase _session;
public HttpSessionStateBase Session
{
    get{
        return _session ?? (_session = new HttpSessionStateWrapper(HttpContext.Current.Session));
    }
    set{
        _session = value;
    }
}

Что касается FormCollection, вам не нужно издеваться над ним, так как вы должны быть в состоянии создать его отдельно от HttpContext.Хороший пример этого есть на Блог Маркуса Хаммарберга.

Другие советы

То, что вы описываете, больше похоже на интеграционное тестирование.Что касается вашей FormCollection, если вы хотите изолировать ее, вы могли бы использовать фреймворк изоляции, такой как RhinoMocks, или "вручную создать" для нее свой собственный макет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top