2012-07-08 33 views
8

Tôi đã dành nửa ngày cho việc này mà không thành công. Làm cách nào để bạn kiểm tra các tuyến đường trong API Web?Kiểm tra đơn vị Tuyến đường tùy chỉnh trong API Web

tôi có nghĩa là cho URI sau:

~/Test/Get/2 

Tôi muốn kiểm tra đơn vị đó url trên được chụp bởi bộ điều khiển thử nghiệm và Nhận hành động chấp nhận một tham số int.

+0

Có thể hữu ích? http://stackoverflow.com/questions/10446174/httpclient-with-asp-net-webapi-in-unit-testing-scenario –

+0

và điều này: http://www.peterprovost.org/blog/2012/06/16/unit-testing-asp-dot-net-web-api/ –

+0

Bạn có thể thử sử dụng gói NuGet MvcRouteUnitTester (hoạt động khá dễ dàng) http://nuget.org/packages/MvcRouteUnitTester – Styxxy

Trả lời

0

Đây là những gì tôi đã làm, xin vui lòng cho tôi biết những gì bạn nghĩ

[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

Bạn có thể vui lòng đăng mã giả của mình cho '_httpContexMock' và' _routes'? Tôi đã làm việc trên cùng một vấn đề và hỏi câu hỏi này: http://stackoverflow.com/q/11851558/61654. – ahsteele

3

để kiểm tra các tuyến đường, tôi đã tạo ra một thư viện để giúp bạn với các khẳng định - MyWebApi: https://github.com/ivaylokenov/MyWebApi

về cơ bản, bạn có thể làm như sau:

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

Nếu bạn muốn thực hiện điều đó cho mình, bạn sẽ nhìn thấy mã ở đây và sao chép nó: https://github.com/ivaylokenov/MyWebApi/blob/master/src/MyWebApi/Utilities/RouteResolvers/InternalRouteResolver.cs