Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 测试中的整个单轨操作调用_Unit Testing_Testing_Castle Monorail - Fatal编程技术网

Unit testing 测试中的整个单轨操作调用

Unit 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

BaseControllerTest.PrepareController足以设置控制器属性,如PropertyBag和Context

[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的属性逻辑实现引入集成测试。