Модульное тестирование WEBAPI-контроллеров

Вопрос:

У меня есть контроллер webapi, который я пытаюсь выполнить. Однако я изо всех сил пытаюсь решить различные типы ControllerContext. Большинство примеров кода, которые я вижу, связаны с тестированием контроллеров MVC, а не с контроллерами Web API.

Контроллер определяется как:

public class OrdersController : ApiController
{

У меня есть этот код, который работает при запуске приложения

uri = Url.Route("DefaultRoute", new { httproute = true, Id = order.Id});

Однако, когда я пытаюсь запустить его как единичный тест, он терпит неудачу. Я отлаживал его и обнаружил, что Url имеет значение null при выполнении модульных тестов, тогда как если я запускаю систему, обычно Url является объектом типа System.Web.Http.Routing.UrlHelper.

Любая идея, как я могу заставить Url.Route() работать при выполнении модульных тестов?

Лучший ответ:

Для тестирования модулей в Web API 2 проще использовать для вас версию Mock для UrlHelper для вашего экземпляра контроллера. В этих примерах используется Moq

        var mockUrlHelper = new Mock<UrlHelper>();    
        ordersCtrl.Url = mockUrlHelper.Object;

Если вы используете более позднюю версию веб-api, вы бы заполнили контроллер в своем тесте с помощью RouteData. Этот образец взят с веб-сайта asp.net:

 controller.Configuration = new HttpConfiguration();
 controller.Configuration.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional });

 controller.RequestContext.RouteData = new HttpRouteData(
    route: new HttpRoute(),
    values: new HttpRouteValueDictionary { { "controller", "products" } });

Оцените статью
TechArks.Ru
Добавить комментарий