MsTests MVC5控制器未触发OnAuthorization

卡贝罗

我正在测试当前项目中的控制器操作。有一种方法可以模拟登录的用户,因此我可以控制其中一种方法,而我忘记了模拟用户,我很惊讶,而没有得到重定向(当您处于非匿名状态时,为非匿名操作定义了行为)未记录),则操作执行完美。我进行了调试,发现没有调用OnAuthorization方法(我的所有控制器都继承自一个覆盖它的自定义控制器。

这是违规测试:

[TestMethod]
public void GetOffersUserCanImprove()
{
    ContractsController controller = new ContractsController();

    ViewResult result = controller.ReceivingImprovements() as ViewResult;

    Assert.IsNotNull(result, "No se pudo acceder a la página de recibir mejoras.");
}

和自定义控制器(它在运行应用程序时完美地调用了该方法,只是在测试时跳过了该方法):

public class MiComunidadController : Controller
{
    protected LoginManager loginManager = LoginManager.EnviromentalFactory();

    protected override void OnAuthorization(AuthorizationContext filterContext)
    {
        base.OnAuthorization(filterContext);

        // Rest of security stuff, non relevant, the execution never
        // reaches this point.
    }
}

关于为什么会发生这种情况以及如何使测试控制器遵循其生命周期的任何提示?

斯利克西姆

这是我期望的单元测试行为,您正在单独测试控制器操作。如果要一起测试授权过程和操作,则将形成集成测试,并且将需要Web托管环境来容纳mvc的整个Web生命周期。

我测试此方法的方法是测试操作,然后进行测试以检查属性的存在,如果有人删除或更改了该属性,则可能会警告您他们可能引入了意外的行为。

然后,您也可以隔离地测试您的授权属性,因此您知道它独立于控制器操作而工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

teamcity说找不到MSTests的Test xxx

MVC5的“通用”包装器-控制器?

MVC5帐户控制器null参考异常

MVC5 控制器未收到 JSON 对象

MVC5控制器参数中的口音

.net Core MSTests项目中未加载app.config

角度控制器未触发

AngularJS控制器功能未触发

MVC5身份验证:每个控制器或基本控制器上的Authorize属性

如何通过从angularJS控制器到MVC5控制器的Ajax调用获取JSON

在我的MVC5控制器中使用StructureMap [4.7.0]设置器注入

1个控制器处理2个模型,ASP.NET,MVC5

在 MVC5 中回发后无法获取控制器中按钮的值

在 MVC5 控制器中,如何为 HtmlHelper 的 htmlAttributes 或 routeValues 创建 IDictionary 或 routeValueDictionary?

从MVC5中的控制器发布到外部表单

将值从控制器传递到mvc5中的javascript中

异步MVC5控制器和异步EF DataContext

MVC5 AngularJS数据未从服务传递到控制器

未从JSON AJAX发布中调用MVC5控制器操作

mvc5剃须刀将参数发送到控制器

如何在ASP MVC5中仅为我的帐户控制器设置路由?

从MVC5或Web API 2控制器操作返回生成的CSS

C# mvc5 通过控制器添加文本框

点网MVC5控制器中的异步功能创建死锁

Visual Studio 2013 IntelliSense停止为ASP.NET MVC5控制器工作

ASP.NET MVC5:对具有会话的控制器进行单元测试

在MVC5中的url中保留默认控制器名称

MVC5找到多个与名为“ Home”的控制器匹配的类型

MVC5中的默认控制器和默认操作