Domanda

Voglio Unit-test di un metodo come il seguente:

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

E 'dentro la mia "SomeController.cs" classe controller e viene chiamato quando l'utente invia un file in un semplice input type = "file" di input HTML.

P.S .: puristi attenzione:. So che questo non è un "puro" unit test, voglio solo chiamare il metodo in un ambiente di test e verificare se fa cambiamenti auspicabili de nel sistema

Grazie a tutti per qualsiasi luce nel soggetto, Lynx.

È stato utile?

Soluzione

Per fortuna la squadra ASP.Net pensato a questo prima di cominciare a MVC e creato lo spazio dei nomi System.Web.Abstractions. Si tratta di una serie di classi base che rispecchiano le classi statiche che sono impossibili da testare tradizionalmente come la classe HttpWebRequest.

Che cosa si vuole fare è contare su una di queste classi di base e fare un po 'di iniezione di dipendenza, al fine di prendere in giro in modo efficace la sessione.

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

Per quanto riguarda il FormCollection, non si dispone di prendere in giro, come si dovrebbe essere in grado di creare una parte un HttpContext. V'è un buon esempio di che il blog di Marcus Hammarberg .

Altri suggerimenti

Quello che stai descrivendo suona più come test di integrazione. Per quanto riguarda il tuo FormCollection, se si voleva isolarlo, è possibile utilizzare un quadro di isolamento come RhinoMocks, o "roll mano" il proprio finto per esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top