ルートのオプションの「id」パラメーターで正しく機能するルーティングを備えた MVC4 WebApi プロジェクトがあります。
routes.Add(new ApiRouteInfo
{
Name = this.AreaName.ToLower() + "_readingsplans",
RouteTemplate = baseUrl + "/plans/readingalerts/{id}",
Defaults = new
{
area = this.AreaName.ToLower(),
controller = "ReadingAlerts",
id = RouteParameter.Optional
}
});
実際のリクエストを作成すると、ルーティングはコントローラ メソッドの GetAll または Get メソッドのいずれかにヒットするように機能します。
public HttpResponseMessage GetAll(BaseQueryFilter filter)
public HttpResponseMessage Get(int id)
しかし単体テストでは、RouteTester オブジェクトは常に GetAll ではなく Get メソッドにヒットします。
作品:
Assert.AreEqual(ReflectionHelper.GetMethodName((ReadingAlertsController p) => p.Get(It.IsAny<int>())), routeTester.GetActionName());
失敗:
Assert.AreEqual(ReflectionHelper.GetMethodName((ReadingAlertsController p) => p.GetAll(null)), routeTester.GetActionName());
null の代わりに実際のフィルター オブジェクトを渡そうとしましたが、結果はまったく変わりません。
2 つの異なるルートを作成することで修正できることはわかっていますが、現在のルーティングは単体テスト以外のすべてで機能するため、少し気が進まないのです。
助言がありますか?