2017-09-07 80 views
0

我有一个基地控制器,其余的OnActionExecutionAsync方法设置一些公共控制器属性,然后在OnActionExecuted方法 此工作正常设置一些常见视图模型的属性,但我现在需要为它编写一些单元测试。没有TDD的我..单元测试基地控制器OnActionExecutionAsync和OnActionExecuted方法

代码我是:

public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) 
{ 
    //set some controller properties 
    await base.OnActionExecutionAsync(context, next); 
} 

public override void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    //set some other viewmodel properties 
    base.OnActionExecuted(filterContext); 
} 

的问题我已经与OnActionExecutionAsync测试中,比它被嘲笑的背景下右痛等,是该方法完成时它会自动调用OnActionExecuted方法,并且由于ActionExecutedContext为空而倒下。 我假设我需要拨打await base.OnActionExecutionAsync(context, next);,而不是简单地await next();?继续使用管道,虽然已经检查了github中的Controller代码,但似乎基本实现只在调用ActionExecutingContext的结果为空时调用OnActionExecutedaspnet core controller on GitHub 任何想法如何让我的测试在没有跳到OnActionExecuted的情况下工作?

回答

3

您是集成测试。当事情难以测试时,这是一个非常明显的迹象,表明你远远超出了单元测试的范围,应该退后一步并重新评估。如果您想确保某些功能可行,请创建一个封装该功能的方法,然后测试。您可以放心地假设OnActionExecutionAsync等将按照它们应该调用您的方法的方式工作,因为该功能已经在MVC代码库中进行了测试。