繁体   English   中英

是否可以查找给定类型的所有名称别名(例如,“ 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通过反射,我不知道如何使我的测试知道Int32int相同。 有办法吗?

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

因此,我假设您的第一个方法实际上正在工作,并且您遇到的唯一问题是在测试方法的某个位置编写的if("int" == parameterType.Name)

由于您希望测试知道“ int”和“ Int32”相同,因此需要这些别名的列表。 可以在这里找到。 此列表包含.Net Framework中的类名称以及C#内置别名。 只需创建并填充字典,然后根据该字典进行检查即可。 是的,您将必须手动键入这些对。

请记住,某些路由约束不仅是数据类型(例如max或length),而且还可以针对相应的数据类型(在示例中为int和string)进行测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM