单元测试基础控制器OnActionExecutionAsync和OnActionExecuted方法

时间:2017-09-07 14:16:51

标签: unit-testing asp.net-core-mvc moq

我有一个基本控制器,我在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

1 个答案:

答案 0 :(得分:3)

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