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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top