2010-08-06 25 views
5

Tengo que escribir una prueba de unidad para este método, pero no puedo construir HttpPostedFileBase ... Cuando ejecuto el método desde el navegador, funciona bien, pero realmente necesito una prueba de unidad autorizada para eso. Entonces mi pregunta es: ¿cómo puedo construir HttpPosterFileBase para pasar un archivo a HttpPostedFileBase?Cómo construir HttpPostedFileBase?

Gracias.

public ActionResult UploadFile(IEnumerable<HttpPostedFileBase> files) 
    { 
     foreach (var file in files) 
     { 
      // ... 
     } 
    } 

Respuesta

6

¿Qué hay de hacer algo como esto:

public class MockHttpPostedFileBase : HttpPostedFileBase 
{ 
    public MockHttpPostedFileBase() 
    { 

    } 
} 

continuación, puede crear una nueva:

MockHttpPostedFileBase mockFile = new MockHttpPostedFileBase(); 
2

En mi caso, utilizo núcleo del núcleo para registros a través de asp.net MVC interfaz web y a través del servicio web RPC y a través de unittest. En este caso, es útil definir envoltorio personalizado para HttpPostedFileBase:

public class HttpPostedFileStreamWrapper : HttpPostedFileBase 
{ 
    string _contentType; 
    string _filename; 
    Stream _inputStream; 

    public HttpPostedFileStreamWrapper(Stream inputStream, string contentType = null, string filename = null) 
    { 
     _inputStream = inputStream; 
     _contentType = contentType; 
     _filename = filename; 
    } 

    public override int ContentLength { get { return (int)_inputStream.Length; } } 

    public override string ContentType { get { return _contentType; } } 

    /// <summary> 
    /// Summary: 
    ///  Gets the fully qualified name of the file on the client. 
    /// Returns: 
    ///  The name of the file on the client, which includes the directory path. 
    /// </summary>  
    public override string FileName { get { return _filename; } } 

    public override Stream InputStream { get { return _inputStream; } } 


    public override void SaveAs(string filename) 
    { 
     using (var stream = File.OpenWrite(filename)) 
     { 
      InputStream.CopyTo(stream); 
     } 
    } 
Cuestiones relacionadas