我有一个Routes的扩展类。我想测试更新的routecollection列表。这是一个摘录:
public static void MapMyRoutes(this RouteCollection routes)
{
//do some stuff
routes.MapHttpRoute(null, controllerPath.Path, new { @namespace = controllerPath.Namespace, controller = controllerPath.ControllerName, id = UrlParameter.Optional });
}
我想对此扩展进行单元测试,但无法解决如何从routecollection中提取映射的URL:
这是一个测试:
[TestMethod]
public void TestMapMyRoutesMapsCorrectly()
{
var routes = new RouteCollection();
routes.MapMyRoutes();
foreach (var route in routes)
{
Assert.AreEqual(route.??, "v1/api/myRoute");
}
}
答案 0 :(得分:1)
RoutesCollection定义为Collection<RouteBase>
,因此将每个项目转换为路线,即:
foreach (var route in routes.Cast<Route>())
{
// Url may not in fact be the correct property …
Assert.AreEqual(route.Url, "v1/api/myRoute");
}
答案 1 :(得分:0)
老实说,你正在用错误的逻辑来测试void方法。由于您的方法无效,您应该使用模拟框架并在.nojekyII
方法中传递模拟的RouteCollection
对象,然后验证MapMyRoutes(this RouteCollection routes)
方法调用。
请参阅this link以了解代码实现