احتجاج عمل أحادي الأمل بأكمله في الاختبارات
-
18-09-2019 - |
سؤال
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);
الحصول على محرك العرض للعب هو مهتز (على الرغم من ذلك ممكنا)، لكنني أعتقد أن اختبار المشاهدات التي تم إنشاؤها مع منطق وحدة تحكم تنطوي على الطريقة التي تتحرك الكثير من التحريك وتحمل جهود الصيانة غير المبررة