Pergunta

BaseControllerTest.PrepareController é suficiente para controlador de configuração de propriedades, tais como PropertyBag e 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"]);
 }
}

Mas agora para executar toda a pipeline para testes de integração, incluindo filtros declarou em atributos de ação?

EDIT: Eu não estou interessado na prestação de vista, apenas a lógica do controlador, juntamente com filtros declarativas.

Eu gosto da idéia de mover quantidade significativa de lógica de configuração vista em filtros de ação, e eu não tenho certeza se eu preciso de nível extra de testes de integração, ou é melhor feito com Selenium?

Foi útil?

Solução

Você pode obter um porão dos filtros, e executá-los.

então, assumindo action é Action<YourController>, e controller é um exemplo do controlador sob teste,

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);

Obtendo o ponto de vista motor de jogo é mais complicado (embora possível), mas acho que os testes visualizações geradas juntamente com a lógica do controlador está envolvendo a forma como muitos em movimento e incorrer esforço de manutenção injustificada

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top