Как заставить мои модульные тесты обходить тег Authorize на моем .NET Web Controller - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть веб-API в .NET 4.6.1, и мои контроллеры защищены Azure B2C.Следовательно, у них есть тег [Authorize].

Я написал модульный тест, чтобы убедиться, что смогу пройти по маршруту и ​​протестировать некоторую бизнес-логику.Однако я не могу понять, как обойти тег [Authorize], и ​​я не хочу авторизоваться с помощью B2C для каждого запускаемого модульного теста.

Я предполагаю, что насмешка над Контроллером контекста будет хорошим началом, ноУ меня проблемы с выяснением синтаксиса.

Есть несколько статей о насмешках над ControllerContext и последующей настройке HttpContext.Request.IsAuthenticated, но это относится к MVC.

Я получаю ошибку при конвертации из System.Web.MVC.ControllerContext в System.Web.Http.Controllers.HttpControllerContext.

Невозможно неявно преобразовать ошибку типа:

Cannot implicitly convert type error

Я надеюсь, что кто-то может помочь мне разобратьсякак обойти тег [Authorize] для моих модульных тестов?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Если вы запускаете тесты в режиме отладки, можно обойти атрибут авторизации, используя директивы препроцессора .Вы можете использовать их для удаления определенных частей из компиляции в режиме отладки (или в режиме выпуска).В следующем примере показано, как удалить атрибут авторизации в режиме DEBUG, оставив его в режиме RELEASE

#if !DEBUG
[Authorize]
#endif
public class MyController : Controller
{
    // controller logic
}

. Я бы посоветовал прочитать больше о директивах препроцессора перед их использованием.Это решение очень зависит от режима, в котором проводятся испытания.

0 голосов
/ 10 февраля 2019

Похоже, в вашем файле используются разные варианты использования, поэтому ваш макет будет

Mock<System.Web.Mvc.ControllerContext>

, а не

Mock<System.Web.Http.Controllers.HttpControllerContext>

Если вы укажете пространство имен, это может исправитьпроблема.

Однако я бы вместо этого разделил тесты, перенеся вашу бизнес-логику из авторизованного контроллера в отдельный класс, который вы можете тестировать проще.

И я уверен, что есть способытестирования ваших маршрутов.

...