c# - 如何测试来自 URL 路由的参数是否正确绑定到对象?(C# 控制器)
问题描述
到目前为止,我尝试寻找答案,我发现的是与查询字符串相关的东西、自定义模型绑定器或与 viewbag 相关的东西(不相关)。对 C# 仍然很陌生,并且对它的内部工作方式不是很熟悉,所以我觉得我无法理解答案或将它们转化为这种情况。(像这样)有了这个问题,我希望找到一个带有评论或一些解释的答案。
情况:
我想测试模型绑定属性是否配置正确。主要动机是TDD,需要特定的配置并且需要测试驱动。另一个动机是,如果有人弄乱它并破坏它,测试会立即告诉你问题出在哪里。
具有单个端点的示例控制器(路由必须是这种方式):
[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();
}
}
封装输入字段的请求对象(我们的标准之一):
public class GetCatsRequestObject
{
[FromRoute(Name = "cat_breed")] public string CatBreed { get; set; }
[FromRoute(Name = "cat_size")] public string CatSize { get; set; }
}
我正在寻找的是测试,我以某种方式使用 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.
}
这可以测试吗?你会怎么做?我知道这是一篇很长的文章,所以我感谢你花时间阅读这篇文章。
解决方案
推荐阅读
- thymeleaf - Thymeleaf:单个元素内的 2 个循环和一个 if 语句
- c++ - 当相机接近模型时,SSAO 样本内核会导致性能下降?
- kubernetes - 基本容器创建失败
- entity-framework - 自动迁移不起作用 [EF Core]
- jquery - 使用 Webpack 4 时如何访问入口文件中的 jQuery 对象 ($)?
- scala - spark.streaming.backpressure.* 属性是否适用于 Spark 结构化流?
- python - 将值列表作为选项传递给 3 个下拉菜单
- laravel - Laravel - 我不明白为什么我的按钮没有打开多个折叠
- android - java.lang.String 类型的用户无法转换为 JSONObject json 响应 android
- php - mysqli num行的php问题不起作用