Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing ASP.NET Web API路由单元测试-未检测到控制器操作_Unit Testing_Asp.net Web Api - Fatal编程技术网

Unit testing ASP.NET Web API路由单元测试-未检测到控制器操作

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) {

我正在尝试对ASP.NET Web API 2控制器中的路由进行单元测试。我严格按照新出版的书中的配方11-6。这是我的控制器:

[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));