2010-04-23 5 views
6

Quiero probar un método de controlador en la prueba de la unidad MVC. Para probar el método de mi controlador, necesito una colección Request.Files [] con longitud uno. Quiero burlar Request.Files [] ya que he usado un control de carga de archivos en mi vista representada por el método del controlador. ¿Alguien puede sugerir cómo puedo simular la colección request.file en mi prueba unitaria.¿Cómo burlarse de Request.Files [] en la clase de prueba de la unidad MVC?

gracias, kapil

Respuesta

10

usted no mencionó qué marco de burla que está utilizando, pero de la forma en que lo haría con la burla de Rhino aquí:

controlador:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(Request.Files.Count); 
    } 
} 

unidad de prueba:

[TestMethod] 
public void SomeTest() 
{ 
    // arrange 
    var controller = new HomeController(); 
    var context = MockRepository.GenerateStub<HttpContextBase>(); 
    var request = MockRepository.GenerateStub<HttpRequestBase>(); 
    var files = MockRepository.GenerateStub<HttpFileCollectionBase>(); 
    context.Stub(x => x.Request).Return(request); 
    files.Stub(x => x.Count).Return(5); 
    request.Stub(x => x.Files).Return(files); 
    controller.ControllerContext = new ControllerContext(context, new RouteData(), controller); 


    // act 
    var actual = controller.Index(); 

    // assert 
    Assert.IsInstanceOfType(actual, typeof(ViewResult)); 
    var viewResult = actual as ViewResult; 
    Assert.IsInstanceOfType(viewResult.ViewData.Model, typeof(int)); 
    Assert.AreEqual(5, viewResult.ViewData.Model); 
} 

Observación: Usando MVCContrib.TestHelper esta prueba podría simplificarse en gran medida especialmente el contexto burlarse parte y la afirma así:

[TestMethod] 
public void SomeTest() 
{ 
    // arrange 
    var sut = new HomeController(); 
    InitializeController(sut); 
    Files["test.txt"] = MockRepository.GenerateStub<HttpPostedFileBase>(); 

    // act 
    var actual = sut.Index(); 

    // assert 
    actual 
     .AssertViewRendered() 
     .WithViewData<int>() 
     .ShouldBe(1); 
} 
+1

Gracias Darin. Estoy usando el framework de burlarse de fuente abierta "Moq". –

Cuestiones relacionadas