2012-07-08 9 views
8

He pasado ya medio día sin éxito. ¿Cómo se evalúan las rutas en la API web?Prueba de unidad Ruta personalizada en API web

quiero decir Dada la siguiente URI:

~/Test/Get/2 

Quiero poner a prueba la unidad que la URL anterior es capturado por el controlador de prueba y obtener la acción de aceptar un parámetro int.

+0

podría ser útil? http://stackoverflow.com/questions/10446174/httpclient-with-asp-net-webapi-in-unit-testing-scenario –

+0

y esto: http://www.peterprovost.org/blog/2012/06/16/unit-testing-asp-dot-net-web-api/ –

+0

Puede intentar usar el paquete NuGet MvcRouteUnitTester (funciona bastante fácil) http://nuget.org/packages/MvcRouteUnitTester – Styxxy

Respuesta

0

Esto es lo que hice, por favor hágamelo saber lo que piensa

[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"]); 
} 
+0

¿Podría publicar su código de simulacro de '_httpContexMock' y' _routes'? He estado trabajando en el mismo problema y he hecho esta pregunta: http://stackoverflow.com/q/11851558/61654. – ahsteele

3

para el ensayo de las rutas, he creado una biblioteca para ayudar con las afirmaciones - MyWebApi: https://github.com/ivaylokenov/MyWebApi

Básicamente, se puede hacer lo siguiente:

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” 
    })); 

Si desea implementar por sí mismo, se puede ver el código aquí y copiarlo: https://github.com/ivaylokenov/MyWebApi/blob/master/src/MyWebApi/Utilities/RouteResolvers/InternalRouteResolver.cs