我有一个带有路由的 MVC4 WebApi 项目,该项目与路由中的可选“id”参数一起正常工作:
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 对象总是命中 Get 方法,而不是 GetAll。
作品:
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 但这根本不会改变结果。
我知道我可以通过创建两条不同的路由来修复它,但我有点不情愿,因为当前路由确实适用于除单元测试之外的所有内容。
有什么建议么?