Pregunta

BaseControllerTest.PrepareController es suficiente para las propiedades de configuración del controlador, tal como PropertyBag y Contexto

[TestClass]
public ProjectsControllerTest : BaseControllerTest
{
 [TestMethod]
 public void List()
 {
  // Setup
  var controller = new ProjectsController();
  PrepareController(controller);
  controller.List();

  // Asserts ...
  Assert.IsInstanceOfType(typeof(IEnumerable<Project>),controller.PropertyBag["Projects"]);
 }
}

Pero ahora a ejecutar toda la tubería para las pruebas de integración, incluyendo filtros declarados en la acción atributos?

EDIT: No estoy interesado en la representación de vista, sólo la lógica del controlador junto con los filtros declarativas.

Me gusta la idea de trasladar cantidad significativa de la lógica de configuración de vista en filtros de acción, y no estoy seguro si necesito nivel adicional de pruebas de integración, o es mejor hecho con selenio?

¿Fue útil?

Solución

se puede conseguir un asimiento de los filtros, y ejecutarlos.

así, suponiendo action es Action<YourController>, y controller es una instancia del controlador bajo prueba,

var filtersAttributes = GetFiltersFor(controller); // say by reflecting over its attributes
var filters = filtersAttributes
    .OrderBy(attr => attr.ExecutionOrder)
    .Select(attr => new { Attribute = attr, Instance = 
        (IFilter)Container.Resolve(attr.FilterType) }); // assuming you use IoC, otherwise simply new the filter type with Activator.CreateInstance or something

Action<ExecuteWhen> runFilters = when =>
{ 
    // TODO: support IFilterAttributeAware filters
    foreach (var filter in filters) 
         if ((filter.Attribute.When & when) != 0) 
             filter.Instance.Perform(when, Context, controller, controllerContext);
};

// Perform the controller action, including the before- and after-filters
runFilters(ExecuteWhen.BeforeAction);
action(controller);
runFilters(ExecuteWhen.AfterAction);

Obtener la vista-motor para jugar es más complicado (aunque posible), pero creo que la prueba genera vistas a lo largo de la lógica del controlador está involucrando demasiados movimiento e incurrir en los costes de mantenimiento injustificada

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