是否可以查找给定类型的所有名称别名(例如 "int" 与 "Int32")?
Is it possible to look up all name alias of a given type (e.g. "int" versus "Int32")?
我一直在编写单元测试来验证 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
通过反射,我不知道如何让我的测试知道 Int32
与 int
相同。有办法吗?
我相信您正在编写这些单元测试,以确保您配置的路由采用合适的方法,并确保在任何签名更改时,您的测试套件也会强制您更改路由约束。
因此,我假设您的第一种方法确实有效,而您遇到的唯一问题是 if("int" == parameterType.Name)
写在测试方法的某处。
由于您希望测试知道 "int" 和 "Int32" 相同,因此您需要这些别名的列表。可以找到here。此列表包含来自 .Net Framework 的 class 名称以及 C# 内置别名。只需创建并填充一个字典并根据它进行检查。是的,您必须手动输入这些对。
请记住,一些路由约束不仅仅是一种数据类型(例如最大或长度),但您也可以针对对应的数据类型(在示例中为 int 和 string)测试它们。
我一直在编写单元测试来验证 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
通过反射,我不知道如何让我的测试知道 Int32
与 int
相同。有办法吗?
我相信您正在编写这些单元测试,以确保您配置的路由采用合适的方法,并确保在任何签名更改时,您的测试套件也会强制您更改路由约束。
因此,我假设您的第一种方法确实有效,而您遇到的唯一问题是 if("int" == parameterType.Name)
写在测试方法的某处。
由于您希望测试知道 "int" 和 "Int32" 相同,因此您需要这些别名的列表。可以找到here。此列表包含来自 .Net Framework 的 class 名称以及 C# 内置别名。只需创建并填充一个字典并根据它进行检查。是的,您必须手动输入这些对。
请记住,一些路由约束不仅仅是一种数据类型(例如最大或长度),但您也可以针对对应的数据类型(在示例中为 int 和 string)测试它们。