Frage

BaseControllerTest.PrepareController ist genug für Controller-Eigenschaften Setup, wie PropertyBag und Kontext

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

Aber jetzt die gesamte Pipeline für Integrationstests ausgeführt werden, einschließlich der Filter in Aktion erklärt Attribute?

EDIT: Ich bin im Hinblick Rendering nicht interessiert, nur die Controller-Logik zusammen mit deklarativen Filter.

Ich mag die Idee der Bewegung erhebliche Menge an Ansichtseinrichtungslogik in der Tat umzusetzen Filter, und ich bin nicht sicher, ob ich zusätzliche Ebene der Integrationstests benötigen, oder ist es besser gemacht mit Selen?

War es hilfreich?

Lösung

Sie halten die Filter bekommen, und führen Sie sie.

so, unter der Annahme, action ist Action<YourController> und controller ist eine Instanz des Controllers im 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);

Ankommen der Blick-Motor zu spielen ist schwieriger (wenn möglich), aber ich denke, dass die Tests generierten Ansichten zusammen mit der Controller-Logik ist viel zu viele bewegliche Beteiligung und nicht gerechtfertigt Wartungsaufwand entsteht

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top