Unit testing ASP.NET Web API路由单元测试-未检测到控制器操作
我正在尝试对ASP.NET Web API 2控制器中的路由进行单元测试。我严格按照新出版的书中的配方11-6。这是我的控制器:Unit testing ASP.NET Web API路由单元测试-未检测到控制器操作,unit-testing,asp.net-web-api,Unit Testing,Asp.net Web Api,我正在尝试对ASP.NET Web API 2控制器中的路由进行单元测试。我严格按照新出版的书中的配方11-6。这是我的控制器: [RoutePrefix("api/account")] public class AccountController : ApiController { private AccountService _accountService; public AccountController(AccountService service) {
[RoutePrefix("api/account")]
public class AccountController : ApiController
{
private AccountService _accountService;
public AccountController(AccountService service)
{
_accountService = service;
}
[Route("{id}")]
public IHttpActionResult Get(string id)
{
return Ok(_accountService.Get(id));
}
[Route("all")]
public IHttpActionResult GetAll()
{
return Ok(_accountService.GetAll());
}
}
下面是我的单元测试(xunit):
第一个单元测试通过,但第二个单元测试失败。我在下一行中隔离了RouteContext帮助器类中的问题,其中GetActionMapping方法仅检测Get(id)操作,而不是GetAll()
我曾尝试使用[HttpGet]属性显式地修饰GetAll()操作方法,并尝试从属性路由切换到集中式路由,但没有成功。我的想法快用完了。为什么GetActionMapping方法没有检测到GetAll()操作以及除Get(id)操作之外的所有其他操作
从浏览器或Fiddler测试时,路由正常。看起来像一个小错误:)
改变
_actionMappings = actionSelector.GetActionMapping(descriptor)[request.Method.ToString()];
致:
谢谢菲利普。不管怎样,我也要在你的书里把它修改一下?
_actionMappings = actionSelector.GetActionMapping(descriptor)[request.Method.ToString()];
_actionMappings = actionSelector.GetActionMapping(descriptor)[request.Method.ToString()];
_actionMappings = actionSelector.GetActionMapping(descriptor).
SelectMany(x => x).Where(x => x.SupportedHttpMethods.Contains(request.Method));