Pregunta

Quiero Unidad de prueba de un método como el siguiente:

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

Es dentro de mi clase controlador "SomeController.cs" y que se llama cuando se somete usuario un archivo en un simple input type = "archivo" de entrada HTML.

P.S .: puristas cuidado:. Sé que esto no es una prueba de la unidad "puro", sólo quiero llamar al método en un entorno de prueba y comprobar si hace cambios deseables en el sistema de

Gracias a todos por cualquier luz en el tema, Lynx.

¿Fue útil?

Solución

Por suerte el equipo ASP.Net pensó en esto antes de que comenzaran en MVC y crean el espacio de nombres System.Web.Abstractions. Se trata de una serie de clases base que reflejan las clases estáticas que son imposibles de prueba tradicionalmente como la clase HttpWebRequest.

Lo que queremos hacer es confían en una de esas clases base y hacer un poco de inyección de dependencias con el fin de burlarse de manera efectiva su sesión.

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

En cuanto a la FormCollection, usted no tiene que burlarse de él, ya que debe ser capaz de crear un aparte de una HttpContext. Hay un buen ejemplo de ello en el blog de Marcus Hammarberg .

Otros consejos

Lo que usted describe suena más como pruebas de integración. En cuanto a su FormCollection, si desea aislarla, se puede utilizar un marco como el aislamiento RhinoMocks, o "mano roll" su propio simulacro para ello.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top