8

私はこれに半日を費やしましたが、成功しませんでした。Web API でルートをどのように単体テストしますか?

つまり、次の URI が与えられます。

~/Test/Get/2

上記の URL が Test コントローラーによってキャプチャされ、int パラメーターを受け入れる Get アクションであることを単体テストしたいと考えています。

4

3 に答える 3

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 のコードを参照してコピーできます。

于 2015-11-10T13:35:29.070 に答える
1

関連する質問で、Web API ルートをテストする方法のすぐに使用できる例を説明しました: ASP.NET WebApi でのルート構成のテスト

于 2013-01-17T01:07:46.460 に答える
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"]);
}
于 2012-07-10T20:01:22.113 に答える