Вопрос по asp.net-mvc-4, c#, asp.net-web-api – Модульный тест Custom Route в Web API

8

Я потратил на это уже полдня, но безуспешно. Как вы тестируете маршруты в Web API?

Я имею в виду, учитывая следующий URI:

~/Test/Get/2

Я хочу провести модульное тестирование, чтобы вышеуказанный URL-адрес был захвачен контроллером Test, а действие Get приняло параметр int.

Вы можете попробовать использовать пакет NuGet MvcRouteUnitTester (работает довольно легко)nuget.org/packages/MvcRouteUnitTester Styxxy
Может быть полезно?stackoverflow.com/questions/10446174/… Jason Evans

Ваш Ответ

3   ответа
0

Это то, что я сделал, пожалуйста, дайте мне знать, что вы думаете

[Test]
public void Should_be_able_to_route_to_gettables_action_in_databaseschemaexplorercontroller()
{
    const string url = "~/DatabaseSchemaExplorer/Tables/DatabaseType/Provider/DataSource/DatabaseName";

    _httpContextMock.Expect(c => c.Request.AppRelativeCurrentExecutionFilePath).Return(url);

    var routeData = _routes.GetRouteData(_httpContextMock);

    Assert.IsNotNull(routeData, "Should have found the route");
    Assert.AreEqual("DatabaseSchemaExplorer", routeData.Values["Controller"]);
    Assert.AreEqual("Tables", routeData.Values["action"]);
    Assert.AreEqual("DatabaseType", routeData.Values["databaseType"]);
    Assert.AreEqual("Provider", routeData.Values["provider"]);
    Assert.AreEqual("DataSource", routeData.Values["dataSource"]);
    Assert.AreEqual("DatabaseName", routeData.Values["databaseName"]);
}
Не могли бы вы опубликовать свой код для_httpContexMock а также_routes? Я работал над той же проблемой и задал этот вопрос:stackoverflow.com/q/11851558/61654.
4

Для тестирования маршрутов я создал библиотеку, которая поможет вам с утверждениями - MyWebApi:https://github.com/ivaylokenov/MyWebApi

По сути, вы можете сделать следующее:

MyWebApi
    .Routes()
    .ShouldMap(“api/WebApiController/SomeAction/5”)
    .WithJsonContent(@”{“”SomeInt””: 1, “”SomeString””: “”Test””}”)
    .And()
    .WithHttpMethod(HttpMethod.Post)
    .To(c => c.SomeAction(5, new RequestModel
    {
        SomeInt = 1,
        SomeString = “Test”
    }));

Если вы хотите реализовать это самостоятельно, вы можете увидеть код здесь и скопировать его: https://github.com/ivaylokenov/MyWebApi/blob/master/src/MyWebApi/Utilities/RouteResolvers/InternalRouteResolver.cs

Похожие вопросы