سؤال

BaseControllerTest.PrepareController يكفي لإعداد خصائص التحكم، مثل ReserveBAG والسياق

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

ولكن الآن لتشغيل خط الأنابيب بأكمله للاختبار التكامل، بما في ذلك المرشحات المعلنة في سمات العمل؟

تحرير: أنا غير مهتم بعرض التقديم، فقط منطق وحدة التحكم جنبا إلى جنب مع مرشحات تصريحة.

أحب فكرة تحريك كمية كبيرة من عرض منطق الإعداد في مرشحات العمل، وأنا لست متأكدا مما إذا كنت بحاجة إلى مستوى إضافي من اختبارات التكامل، أم أنه من الأفضل القيام به مع السيلينيوم؟

هل كانت مفيدة؟

المحلول

يمكنك الحصول على تعليق من المرشحات، وتشغيلها.

لذلك، افترض action يكون Action<YourController>, ، و controller هو مثيل لوحدة التحكم قيد الاختبار،

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

الحصول على محرك العرض للعب هو مهتز (على الرغم من ذلك ممكنا)، لكنني أعتقد أن اختبار المشاهدات التي تم إنشاؤها مع منطق وحدة تحكم تنطوي على الطريقة التي تتحرك الكثير من التحريك وتحمل جهود الصيانة غير المبررة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top