2010-03-24 15 views
6

¿Qué aspecto tendría una prueba de unidad simple para confirmar que existe un determinado controlador si estoy utilizando Rhino Mocks, NUnit y ASP.NET MVC 2? Estoy tratando de entender el concepto de TDD, pero no veo cómo se vería una prueba simple como "Controller XYZ Exists". Además, ¿cómo se vería la unidad de prueba en el para probar un resultado de acción en una vista?TDD un controlador con ASP.NET MVC 2, NUnit y Rhino Mocks

+0

Más importante aún, estoy usando ASP.NET MVC 2. –

+0

¿Vamos a suponer que sus controladores están registrados en tiempo de ejecución? En este caso, ¿no querrías una prueba de integración en lugar de una prueba unitaria? –

Respuesta

12

confirme que existe un controlador

pruebas de unidad que tiene en sus acciones es una fuerte sugerencia de que haya un controlador de lo que nos lleva a:

¿Cómo se vería la prueba de unidad en probar una Acción Resultado en una vista

He aquí un ejemplo:

public class HomeController: Controller 
{ 
    private readonly IRepository _repository; 
    public HomeController(IRepository repository) 
    { 
     _repository = repository; 
    } 

    public ActionResult Index() 
    { 
     var customers = _repository.GetCustomers(); 
     return View(customers); 
    } 
} 

Y la prueba de la unidad correspondiente:

[Test] 
public void HomeController_Index_Action_Should_Fetch_Customers_From_Repo() 
{ 
    // arrange 
    var repositoryStub = MockRepository.GenerateStub<IRepository>(); 
    var sut = new HomeController(repositoryStub); 
    var expectedCustomers = new Customer[0]; 
    repositoryStub 
     .Stub(x => x.GetCustomers()) 
     .Return(expectedCustomers); 

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

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

MVCContrib tiene algunas funciones muy útiles que le permite burlas HttpContext y también test your routes.

3

¿Por qué le gustaría probar si existe un controlador? Lo que debes hacer es probar el comportamiento del controlador. Su controlador es un código bajo prueba y pone alguna expectativa sobre él y luego afirma si las expectativas se cumplen o no.

Hay muchos tutoriales sobre cómo hacer TDD con ASP.NET MVC. Usted puede comenzar, por ejemplo, aquí

http://codebetter.com/blogs/jeffrey.palermo/archive/2008/03/09/this-is-how-asp-net-mvc-controller-actions-should-be-unit-tested.aspx

+0

Lo he visto, pero está mal. Nunca debes afirmar más de una vez por prueba. Además, está más centrado en las pruebas de repositorio que una simple prueba de controlador. –

+0

¿Una afirmación por prueba? Eso podría tener sentido en algún contexto en una galaxia lejana, pero para las pruebas de Controlador tiene poco sentido. –