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

Я хочу к Модульному тесту метод как следующее:

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 "файла".

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

Спасибо всем за любой свет в предмете, Lynx.

6
задан Lynx Kepler 24 February 2010 в 15:44
поделиться

2 ответа

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

4
ответ дан 17 December 2019 в 07:03
поделиться

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

0
ответ дан 17 December 2019 в 07:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: