我正在为WebAPI控制器编写一些单元测试,我想断言的一个方面是参数匹配。
我已经按照Filip Wojcieszyn's blog中使用的方法进行了操作,该方法工作正常,但我现在正在寻求扩展其断言。
我在控制器上有三个动作(所有三个动作都经过实际验证):
[HttpGet]
public IEnumerable<Task> Get()
[HttpGet]
public IEnumerable<Task> Get(string elementType)
[HttpGet]
public Task Get(long id)
我有以下代码
var actionSelector = new ApiControllerActionSelector();
var descriptor = actionSelector.SelectAction(_controllerContext);
return descriptor.GetParameters();
问题在于,当我在无参数路由上调用descriptor.GetParameters()时,它返回一个包含1个参数的集合 - “long id”参数。
任何人都可以解释为什么它只返回这个以及其他两个重载都没有,并且是否有可能获得过载的可能性?
答案 0 :(得分:3)
问题的原因是被调用的路线不够具体。
WebAPI选择具有最多匹配参数的方法,在这种情况下意味着在代码行上
var descriptor = actionSelector.SelectAction(_controllerContext);
正在选择意外的操作 - 意外,因为我正在寻找Get()并获得Get(长ID)。
要解决此问题,我只需将配置的路由拆分为两个:第一个预期(即非可选)一个'id'参数,以及一个不接受'id的更一般的路由'参数。
然后一切都落到了位置。