我已经花了半天时间没有任何成功。你如何在 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”
}));
如果想自己实现,可以看这里的代码,复制一下: https ://github.com/ivaylokenov/MyWebApi/blob/master/src/MyWebApi/Utilities/RouteResolvers/InternalRouteResolver.cs
我在相关问题中描述了如何测试 Web API 路由的现成示例:Testing route configuration in 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"]);
}