如何测试ASP.NET Core中的自定义操作筛选器? [英] How to test custom action filter in ASP.NET Core?

查看:0
本文介绍了如何测试ASP.NET Core中的自定义操作筛选器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在ASP.NET核心应用程序中创建了一个简单的操作筛选器,此操作筛选器应该记录用户的活动:

public class AuditAttribute : IResultFilter
{
    private readonly IAuditService _audit;
    private readonly IUnitOfWork _uow;
    public AuditAttribute(IAuditService audit, IUnitOfWork uow)
    {
        _audit = audit;
        _uow = uow;
    }
    public void OnResultExecuting(ResultExecutingContext context)
    {
        ar model = new Audit
        {
            UserName = context.HttpContext.User,
            //...
        };
        _audit.Add(model);
        _uow.SaveChanges();
    }
    public void OnResultExecuted(ResultExecutedContext context)
    {
    }
}

现在我只想知道如何为它编写单元测试。我正在使用xUnitMock

推荐答案

根据您的代码,要进行单元测试,您还需要模拟HttpContext。 顺便说一句,这个比特似乎不太对:UserName = context.HttpContext.User我想你的意思是UserName = context.HttpContext.User.Identity.Name。无论如何,测试方法应该是这样的:

 public void OnResultExecuting_Test()
 {
     // Arrange sesction :
     var httpContextWrapper = new Moq<HttpContextBase>();
     var genericIdentity = new GenericIdentity("FakeUser","AuthType");
     var genericPrincipal = new GenericPrincipal(genericIdentity , new string[]{"FakeRole"});
     httpContextWrapper.Setup(o=> o.User).Return(genericPrincipal);
     var controller = new FakeController(); // you can define a fake controller class in your test class (should inherit from MVC Controller class)
     controller.controllerContext = new ControllerContext( httpContextWrapper.Object, new RouteData(), controller );
     var audit = new Moq<IUnitOfWork>();
     var uow = new Moq<IAuditService>();
     // more code here to do assertion on audit
     uow.Setup(o=>o.SaveChanges()).Verifiable();
     var attribute= new AuditAttribute(audit.Object,uow.Object);

     // Act Section:
     attribute.OnActionExecuting( filterContext );

     // Assert Section:
     ... // some assertions
     uow.Verify();

 }

这篇关于如何测试ASP.NET Core中的自定义操作筛选器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆