私はこれに半日を費やしましたが、成功しませんでした。Web API でルートをどのように単体テストしますか?
つまり、次の URI が与えられます。
~/Test/Get/2
上記の URL が Test コントローラーによってキャプチャされ、int パラメーターを受け入れる Get アクションであることを単体テストしたいと考えています。
私はこれに半日を費やしましたが、成功しませんでした。Web API でルートをどのように単体テストしますか?
つまり、次の URI が与えられます。
~/Test/Get/2
上記の URL が Test コントローラーによってキャプチャされ、int パラメーターを受け入れる Get アクションであることを単体テストしたいと考えています。
ルートをテストするために、アサーションに役立つライブラリを作成しました - 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”
}));
関連する質問で、Web API ルートをテストする方法のすぐに使用できる例を説明しました: ASP.NET WebApi でのルート構成のテスト
これは私がやったことです、あなたの考えを教えてください
[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"]);
}