До сих пор я пытался найти ответ, я обнаружил что-то связанное со строкой запроса, пользовательские привязки модели или что-то с сумкой просмотра (не имеет значения). Я все еще довольно новичок в 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.
}
Возможно ли это проверить? Как бы вы это сделали? Я понимаю, что это длинный пост, поэтому я благодарю за то, что нашли время прочитать это.