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

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

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

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

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

Спасибо всем за свет в теме, Lynx.

Ответы [ 2 ]

4 голосов
/ 24 февраля 2010

К счастью, команда 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. Хороший пример тому есть в блоге Маркуса Хаммарберга .

0 голосов
/ 24 февраля 2010

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

...