是否可以查找给定类型的所有名称别名(例如“int”与“Int32”)

本文关键字:例如 int 别名 Int32 有名称 查找 类型 是否 | 更新日期: 2023-09-27 17:58:18

我一直在编写单元测试来验证MVC路由的有效性。例如,

[Route("foo/bar/{id:int}")]
public IHttpActionResult SomeAction(int id)
{
   // ... 
}

将是有效的,但是

[Route("foo/bar/{id:List<string>}")]
public IHttpActionResult SomeAction(int id)
{
   // ... 
}

[Route("foo/bar/{buzz:int}")]
public IHttpActionResult SomeAction(int id)
{
   // ... 
}

不会。

但问题是,我得到了假阴性,因为在上面的第一个例子中,当我检查路由中的{int:id}与动作方法中的参数匹配时,参数中的类型名称通过反射是Int32,我不知道如何让我的测试知道Int32int相同。有办法吗?

是否可以查找给定类型的所有名称别名(例如“int”与“Int32”)

我相信您编写这些单元测试是为了确保您配置的路由采用合适的方法,并确保在任何签名更改时,您的测试服也会迫使您更改路由约束。

因此,我假设您的第一个方法确实有效,而您遇到的唯一问题是在测试方法的某个地方编写的if("int" == parameterType.Name)

由于您希望您的测试知道"int"answers"Int32"是相同的,因此您需要这些别名的列表。它可以在这里找到。此列表包含.Net Framework中的类名以及C#内置别名。只需创建并填充一个字典,然后在此基础上进行检查。是的,您必须手动键入这些配对。

请记住,一些路由约束不仅仅是一个数据类型(例如max或length),您也可以针对相应的数据类型(在示例中,int和string)来测试它们。