Обработка заявок при тестировании контроллера в asp. net ядре - PullRequest
2 голосов
/ 06 февраля 2020

Работая в ядре asp. net, есть несколько контроллеров, у которых есть претензии. Пример кода выглядит следующим образом.

[HttpGet, Route("GetCustomerList")]
        public ActionResult<GenericResponse> Get()
        {
            var claims = User as ClaimsPrincipal;
            string username = claims.Claims.Where(c => c.Type == "UserName").Select(x => x.Value).FirstOrDefault();
            string roleid = claims.Claims.Where(c => c.Type == "RoleId").Select(x => x.Value).FirstOrDefault();
            ........
            ........
        }

Как мне обращаться с этими утверждениями при тестировании контроллера? Я пробовал решение, данное Как добавить претензии в макет ClaimsPrincipal т.е. первое решение. Однако в моем контроллере во время отладки пользователь получает нулевое значение, и оно останавливается.

1 Ответ

2 голосов
/ 06 февраля 2020

Пользователь, к которому вы пытаетесь обратиться в вашем контроллере, находится в HttpContext, поэтому вы можете создать DefaultHttpContext для тестируемого контроллера и связать ClaimsPrincipal с этим DefaultHttpContext, как показано в следующем примере:

var fakeClaims = new List<Claim>()
{
   new Claim(ClaimTypes.Name, "name"),
   new Claim("RoleId", "1"),
   new Claim("UserName", "John")
};

var fakeIdentity = new ClaimsIdentity(fakeClaims, "TestAuthType");
var fakeClaimsPrincipal = new ClaimsPrincipal(fakeIdentity);

ControllerToTest controller = new ControllerToTest();

ControllerToTest.ControllerContext.HttpContext = new DefaultHttpContext
{
   User = fakeClaimsPrincipal 
};

ControllerToTest.Get();

Вы также можете издеваться над HttpContext согласно этому примеру

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...