Как проверить, правильно ли привязаны параметры из URL Route к объекту? (C# контроллер) - PullRequest
2 голосов
/ 22 апреля 2020

До сих пор я пытался найти ответ, я обнаружил что-то связанное со строкой запроса, пользовательские привязки модели или что-то с сумкой просмотра (не имеет значения). Я все еще довольно новичок в C# и не очень хорошо знаком с его внутренней работой, такой как эта, поэтому я не чувствую, что могу понять ответы или перевести их в эту ситуацию. (Например, this ). В этом вопросе я надеюсь найти ответ с комментарием или несколькими объяснениями.

Ситуация:

Я хочу проверить , если привязка модели атрибуты настроена правильно. Основная мотивация: TDD, требуется конкретная c конфигурация, которую необходимо протестировать. Другая мотивация состоит в том, что если кто-то запутается с ним и сломает его, тест сразу скажет, где проблема.

Пример контроллера с единственной конечной точкой (маршрут должен быть таким):

    [ApiController]
    [Route("/cats")]
    public class CatsController : ControllerBase
    {
        [HttpGet]
        [Route("cat-breed/{cat_breed}/cat-size/{cat_size}")]
        public IActionResult GetMultipleCats([FromRoute] GetCatsRequestObject request)
        {
            //implementation is not important

            return Ok();
        }
    }

A объект запроса для инкапсуляции полей ввода (один из наших стандартов):

    public class GetCatsRequestObject
    {
        [FromRoute(Name = "cat_breed")]   public string CatBreed { get; set; }
        [FromRoute(Name = "cat_size")]    public string CatSize { get; set; }
    }

Что я m ищет - это тест , где я как-то выполняю вызов с URL на , что бы ни делал модель привязка , а затем в контроллере я проверяю, находятся ли значения из URL в правильных местах в / и в моем объекте запроса . Примерно так:

private CatsController _controllerUnderTest = new CatsController();

[Test]
public void GivenSomeUrl_WhenControllerIsCalledWithIt_ThenParametersFromUrlGetBindedCorrectly()
{
    //arrange
    string urlpart = "/cats/cat-breed/British%20Shorthair/cat-size/Medium%20Large";
    GetCatsRequestObject expectedResult = new GetCatsRequestObject() { CatBreed = "British Shorthair", CatSize = "Medium Large" };

    // The rest of the setup I don't know how to do

    //act
    // somehow do a call with the url, rather than request object.

    //assert
    // somehow capture the model binding result and compare it with expected result.
}

Возможно ли это проверить? Как бы вы это сделали? Я понимаю, что это длинный пост, поэтому я благодарю за то, что нашли время прочитать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...