Question

BaseControllerTest.PrepareController est suffisant pour la configuration des propriétés du contrôleur, comme PropertyBag et contexte

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

Mais maintenant pour exécuter l'ensemble du pipeline pour les tests d'intégration, y compris les filtres déclarés dans les attributs action?

EDIT: Je ne suis pas intéressé vu le rendu, juste la logique du contrôleur ainsi que des filtres déclaratives.

J'aime l'idée de déplacer quantité importante de la logique de configuration des vues dans les filtres d'action, et je ne suis pas sûr si j'ai besoin niveau supplémentaire de tests d'intégration, ou est-il préférable fait avec Sélénium?

Était-ce utile?

La solution

vous pouvez obtenir une prise des filtres, et de les exécuter.

si, en supposant que action est Action<YourController>, et controller est une instance de l'unité de commande en cours de 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);

Mise en la vue moteur à jouer est plus délicate (si possible), mais je pense que le test a généré des vues ainsi que la logique du contrôleur est impliquant beaucoup trop de mouvement et d'engager des efforts de maintenance injustifiée

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top