C# 基本控制器中的属性在mvc5的单元测试中未触发
我知道这不是进行单元测试的正确方法,但我们的基本控制器上有一个ActionFilterAttribute,在单元测试期间它永远不会被触发。我知道我们应该独立测试它,但我们希望将它集成到我们的整体端到端测试中C# 基本控制器中的属性在mvc5的单元测试中未触发,c#,asp.net-mvc,unit-testing,C#,Asp.net Mvc,Unit Testing,我知道这不是进行单元测试的正确方法,但我们的基本控制器上有一个ActionFilterAttribute,在单元测试期间它永远不会被触发。我知道我们应该独立测试它,但我们希望将它集成到我们的整体端到端测试中 [ThemeModel] public class BaseController : Controller { public MyModel Context { get; set; } } 从继承的控制器运行测试时,如何集成属性?我理解属性与控制器和mvc框架的一部分没
[ThemeModel]
public class BaseController : Controller
{
public MyModel Context { get; set; }
}
从继承的控制器运行测试时,如何集成属性?我理解属性与控制器和mvc框架的一部分没有联系
谢谢…您应该单独测试您的过滤器。创建所需的控制器上下文对象和用户“filter.OnActionExecuted(actionExecutedContext.Object);”类似语法。我认为有两个选项。1是你已经在做的,我不会改变它。2是你问题的答案。我相信两者都有是好的
HttpContextBase
。我假设您已经有了一个mockHttpContextBase
来进行会话或cookie模拟,所以我将突出显示特定过滤器的主要内容。(如果没有,只需搜索HttpContextBase
和单元测试)
公共类MockHttpContext:HttpContextBase
{
公共MockHttpContext()
{
MockRequest=newmock();
//……等等。。
var actionExecutingContext=new Mock();
SetupGet(x=>x.HttpContext)。返回(this);
var filter=new ThemeModelAttribute();
OnActionExecuting(actionExecutingContext.Object);
//如果需要,OnActionExecuted具有类似的设置。
}
}嗯 检查属性
emodel
是否具有AttributeUsage(Inherited=true)
我需要将其完全集成,否则我需要重写一个旧项目中的所有测试。我将独立测试操作筛选器,但其他测试因此而中断。您必须创建一个使用自主机服务器的集成测试