Unit testing 测试中的整个单轨操作调用
BaseControllerTest.PrepareController足以设置控制器属性,如PropertyBag和ContextUnit testing 测试中的整个单轨操作调用,unit-testing,testing,castle-monorail,Unit Testing,Testing,Castle Monorail,BaseControllerTest.PrepareController足以设置控制器属性,如PropertyBag和Context [TestClass] public ProjectsControllerTest : BaseControllerTest { [TestMethod] public void List() { // Setup var controller = new ProjectsController(); PrepareController(contr
[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"]);
}
}
[TestClass]
公共项目控制器测试:BaseControllerTest
{
[测试方法]
公众作废清单()
{
//设置
var controller=新项目控制器();
准备控制器(控制器);
controller.List();
//断言。。。
Assert.IsInstanceOfType(typeof(IEnumerable),controller.PropertyBag[“Projects”]);
}
}
但是现在要运行整个集成测试管道,包括在操作属性中声明的过滤器吗
编辑:
我对视图渲染不感兴趣,只对控制器逻辑和声明性过滤器感兴趣
我喜欢将大量视图设置逻辑移动到操作过滤器中的想法,我不确定是否需要额外的集成测试级别,还是使用Selenium更好?您可以获得过滤器并运行它们 因此,假设
action
是action
,而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);
var filtersAttributes=GetFiltersFor(控制器);//通过反思它的属性
var filters=filtersAttributes
.OrderBy(attr=>attr.ExecutionOrder)
.Select(attr=>new{Attribute=attr,Instance=
(IFilter)Container.Resolve(attr.FilterType)});//假设您使用IoC,否则只需使用Activator.CreateInstance之类的新过滤器类型
操作runFilters=when=>
{
//TODO:支持iFilterAttributeWare筛选器
foreach(过滤器中的var过滤器)
if((filter.Attribute.When&When)!=0)
Perform(when、Context、controller、controllerContext);
};
//执行控制器操作,包括前后过滤器
runFilters(ExecuteWhen.BeforeAction);
行动(控制器);
运行过滤器(ExecuteWhen.AfterAction);
让视图引擎发挥作用更为棘手(尽管可能),但我认为测试生成的视图以及控制器逻辑涉及太多的移动,并导致不合理的维护工作我不想在这里渲染视图,我只是测试控制器,假设过滤器构成逻辑的一个组成部分。按照您的建议执行操作需要根据Monorail文档对属性逻辑进行大量测试。相反,我试图找到一种方法,将实际monorail的属性逻辑实现引入集成测试。