2012-07-08 19 views
8

これで半日を過ごしましたが、何の成功もありませんでした。 Web APIで単体テストルートをどのようにしますか?単体テストWeb APIのカスタムルート

私は、次のURIを与えられた意味:

~/Test/Get/2 

私は上記のURLは、テストコントローラによって捕獲され、int型のパラメータを受け入れるアクションを取得していることをユニットテストしたいです。

+0

は便利かもしれませんか? http://stackoverflow.com/questions/10446174/httpclient-with-asp-net-webapi-in-unit-testing-scenario –

+0

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

+0

あなたはNuGetパッケージMvcRouteUnitTesterを使うことができます(かなり簡単です)http://nuget.org/packages/MvcRouteUnitTester – Styxxy

答えて

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

'_httpContexMock'と' _routes'ですか?私は同じ問題に取り組んでおり、この質問をしました:http://stackoverflow.com/q/11851558/61654。 – ahsteele

3

ルートをテストするために、私はアサーションのお手伝いをするためのライブラリを作成している - 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