是否可以查找给定类型的所有名称别名(例如" int" vs" Int32")?

时间:2016-07-24 01:05:35

标签: c# .net asp.net-mvc reflection asp.net-mvc-routing

我一直在编写单元测试来验证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)
{
   // ... 
}

不会告发&#39;吨

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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