Comment unité tester une méthode qui reçoit un FormCollection pour télécharger un fichier?
-
22-09-2019 - |
Question
Je veux à l'unité test une méthode comme suit:
public ActionResult StoreFile(FormCollection form, string _paginaAtual)
{
Session["MySession"] = 1
if (Request.Files["uploadedFiles"] != null)
{
//do something about the file
}
return View()
}
Il est dans ma classe de contrôleur « de SomeController.cs » et il est appelé lorsque l'utilisateur soumet un fichier dans un type d'entrée simple, = « fichier » entrée HTML.
P.S .: Les puristes méfiez-vous. Je sais que ce n'est pas un test unitaire « pure », je veux juste appeler la méthode dans un environnement de test et vérifier si elle fait de changements souhaitables dans le système
Merci à tous pour toute la lumière dans le sujet, Lynx.
La solution
Heureusement, l'équipe ASP.Net pensé à ce sujet avant de commencer sur MVC et ont créé l'espace de noms System.Web.Abstractions. Il est une série de classes de base qui reflètent les classes statiques qui sont impossibles à tester traditionnellement comme la classe HttpWebRequest.
Qu'est-ce que vous voulez faire est de compter sur l'une de ces classes de base et faire un peu d'injection de dépendance afin de se moquer efficacement votre session.
HttpSessionStateBase _session;
public HttpSessionStateBase Session
{
get{
return _session ?? (_session = new HttpSessionStateWrapper(HttpContext.Current.Session));
}
set{
_session = value;
}
}
En ce qui concerne le FormCollection, vous n'avez pas à se moquer, comme vous devriez être en mesure de créer une part d'un HttpContext. Il y a un bon exemple sur blog de Marcus Hammarberg .
Autres conseils
Qu'est-ce que vous décrivez ressemble plus à des tests d'intégration. Quant à votre FormCollection, si vous vouliez isoler, vous pouvez utiliser un cadre d'isolement comme RhinoMocks, ou « rouleau main » votre propre maquette pour elle.