Domanda

BaseControllerTest.PrepareController è sufficiente per la configurazione delle proprietà del controller, ad esempio PropertyBag e Context

[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"]);
 }
}

Ma ora è necessario eseguire l'intera pipeline per i test di integrazione, inclusi i filtri dichiarati negli attributi dell'azione?

MODIFICARE:Non mi interessa il rendering della vista, solo la logica del controller insieme ai filtri dichiarativi.

Mi piace l'idea di spostare una quantità significativa di logica di impostazione della vista nei filtri di azione e non sono sicuro di aver bisogno di un livello aggiuntivo di test di integrazione o è meglio farlo con Selenium?

È stato utile?

Soluzione

puoi procurarti i filtri ed eseguirli.

quindi, supponendo action È Action<YourController>, E controller è un'istanza del controller sotto test,

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

Far funzionare il motore di visualizzazione è più complicato (anche se possibile), ma penso che testare le visualizzazioni generate insieme alla logica del controller coinvolga troppi movimenti e comporti uno sforzo di manutenzione ingiustificato

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top