Вы правы. Не уверен, что я только что посмотрел. Должно быть, F12 сделал неправильную вещь. Спасибо!

ою веб-API в ASP.NET Core и хочу провести модульное тестирование контроллеров.

Я ввожу интерфейс для доступа к данным, который я могу легко высмеять. Но контроллер должен проверить заголовки в Запросе на токен, и этот Запрос, кажется, не существует, когда я сам создаю экземпляр контроллера, и это также только для получения, поэтому я даже не могу установить его вручную. Я нашел много примеров, чтобы издеваться над ApiController, но это не ядро ​​.NET. Также много учебных пособий и примеров того, как проводить модульное тестирование основных контроллеров .net, но ни один из них не использовал HttpRequest.

Я построил MCVE, чтобы продемонстрировать это:

[Produces("application/json")]
[Route("api/Players")]
public class PlayersController : Controller
{
    private IAccessor accessor;

    public PlayersController(IAccessor ac = null):base()
    {
        accessor = ac ?? AccessorFactory.GetAccessor();
    }

    /// <summary>
    /// Get all players. Must be logged in.
    /// </summary>
    /// <returns>Ok or Unauthorized.</returns>
    [HttpGet]
    public IActionResult Get()
    {
        Player client = accessor.GetLoggedInPlayer(Request.Headers["token"]); // NRE here because Request is null
        if (client == null) return Unauthorized();
        return Ok(accessor.GetAllPlayers());

    }
}    

Я использую Moq и MSTest в своем тестовом проекте и внедряю смоделированный IAccessor. Как ввести запрос или инициализировать его с помощью контроллера? Я думаю, что моим последним средством было бы отражение, но я действительно хочу избежать этого.

Ответы на вопрос(1)

Ваш ответ на вопрос