2010-02-24 3 views
5

Ich mag eine Methode, wie die zu Unit-Test folgenden:Wie Unit-Test eine Methode, die eine FormCollection erhält, um eine Datei hochzuladen?

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

Es ist in meiner „SomeController.cs“ Controller-Klasse und es wird aufgerufen, wenn der Benutzer eine Datei in einem einfachen Eingabetyp einreicht = „file“ HTML-Eingabe

P.S .: Puristen aufgepasst: WISSENS, dass dies keine "reine" Einheitsprüfung ist, ich möchte die Methode nur in einer Testumgebung aufrufen und prüfen, ob sie die gewünschten Änderungen im System bewirkt.

Vielen Dank für alle Licht in das Thema, Lynx.

Antwort

3

Glücklicherweise hat das ASP.Net-Team darüber nachgedacht, bevor sie mit MVC begonnen und den System.Web.Abstractions-Namespace erstellt haben. Es ist eine Reihe von Basisklassen, die die statischen Klassen spiegeln, die traditionell nicht wie die HttpWebRequest-Klasse getestet werden können.

Was Sie tun möchten, ist auf eine dieser Basisklassen verlassen und ein wenig Dependency-Injektion, um Ihre Sitzung effektiv zu verspotten.

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

Was die Formcollection, man muss es nicht verspotten, wie Sie in der Lage sein sollen, von einem Httpcontext eine auseinander zu erstellen. Es gibt ein gutes Beispiel dafür auf Marcus Hammarberg's blog.

+0

Nizza, ich verspotten meine Session! Aber Wie verspotten ich die „Formcollection“? –

+0

sehen die aktualisierte Sachen am Ende der Frage – Josh

0

Was Sie beschreiben, klingt eher nach Integrationstests. Wenn Sie Ihre FormCollection isolieren möchten, können Sie ein Isolierungsframework wie RhinoMocks verwenden oder Ihren eigenen Mock dafür "handrollen".

+0

Schade, konnte ich nicht die Formcollection verspotten = ( –

Verwandte Themen