我有一个基本控制器,我在OnActionExecutionAsync
方法中设置了一些常用的控制器属性,然后在OnActionExecuted
方法中设置一些常见的viewmodel属性
这工作正常,但我现在需要为它编写一些单元测试。没有tdd对我来说..
我的代码是:
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的结果为null aspnet core controller on GitHub时,基本实现似乎只调用OnActionExecuted
任何想法如何让我的测试工作没有它跳到OnActionExecuted
?
答案 0 :(得分:3)
您正在进行集成测试。当事情变得难以测试时,这是一个非常明确的迹象,表明您远远超出了单元测试的范围,应该退后一步并重新评估。如果您希望确保某些功能正常工作,请创建一个封装该功能的方法,然后测试 。您可以放心地假设OnActionExecutionAsync
等将按预期运行并调用您的方法,因为该功能已经在MVC代码库中进行了测试。