相关疑难解决方法(0)

如何对应用了[Authorize]属性的控制器方法进行单元测试?

我搜索了stackoverflow并用Google搜索了几个小时,但仍未找到解决我"琐碎"问题的任何解决方案.

如果您为过滤器编写单元测试[Authorize] ActionResult,那么如何解决问题以假冒该用户的身份验证?

我有很多ActionResult过滤的方法,[Authorize]我想测试我的所有ActionResult方法,无论它们是否被过滤[Authorize].

我的意思的一个简单例子:

[TestMethod]
public void Create_Get_ReturnsView()
{
 // Arrange
 var controller = new UserController();
 // Act
 var result = controller.Create();
 // Assert
 Assert.IsNotNull(result as ViewResult);
}

[Authorize]
public ActionResult Create()
{
 return View("Create");
}
Run Code Online (Sandbox Code Playgroud)

截至目前,由于[Authorize]过滤器,测试甚至没有命中ActionResult方法,抛出的异常是: System.NullReferenceException: Object reference not set to an instance of an object.

asp.net-mvc unit-testing authorization

30
推荐指数
1
解决办法
2万
查看次数

在ASP.NET Core MVC API控制器上单元测试AuthorizeAttribute

我有一个ASP.NET核心MVC API与控制器需要进行单元测试.

控制器:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;

namespace TransitApi.Api.Controllers
{
    [Route("api/foo")]
    public class FooController : Controller
    {
        private IFooRepository FooRepository { get; }

        public FooController(IFooRepository fooRepository)
        {
            FooRepository = fooRepository;
        }

        [HttpGet]
        [Authorize("scopes:getfoos")]
        public async Task<IActionResult> GetAsync()
        {
            var foos = await FooRepository.GetAsync();
            return Json(foos);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

至关重要的是,我能够对其有效性进行单元测试AuthorizeAttribute.我们的代码库中存在缺少属性和不正确范围的问题.这个答案正是我正在寻找的,但没有ActionInvoker方法,Microsoft.AspNetCore.Mvc.Controller我不能这样做.

单元测试:

[Fact]
public void GetAsync_InvalidScope_ReturnsUnauthorizedResult()
{
    // Arrange
    var fooRepository = new StubFooRepository();
    var controller = new FooController(fooRepository)
    {
        ControllerContext = …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing xunit asp.net-core-mvc .net-core

11
推荐指数
2
解决办法
5421
查看次数