我一直在编写单元测试来验证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
通过反思,我不知道如何让我的测试知道Int32
与int
相同。有办法吗?
答案 0 :(得分:1)
我相信您正在编写这些单元测试,以确保您配置的路由采用合适的方法,并确保在任何签名更改时您的测试套件也会强制您更改路由约束。
因此,我假设您的第一个方法实际上正在工作,并且您遇到的唯一问题是在您的测试方法上的某处编写了if("int" == parameterType.Name)
。
由于您希望测试知道“int”和“Int32”是相同的,因此您需要这些别名的列表。它可以找到here。此列表包含.Net Framework中的类名以及C#内置别名。只需创建并填充字典并根据它进行检查。是的,您必须手动输入这些对。
请记住,某些路由约束不仅仅是一种数据类型(例如max或length),但您也可以针对相应的数据类型(在示例,int和string上)测试它们。