所以我在MVC3网站上拍摄100%的报道,我们正在使用区域。除Application_Start
中的这一行外,我可以覆盖其他所有内容:
AreaRegistration.RegisterAllAreas();
我已经对每个区域的注册进行了全面测试,所以这真的相当于各种类型的集成测试,但是我还是想以某种方式覆盖这个,而不必诉诸CoverageExclude属性或降低覆盖率。
请注意,在NUnit中对此进行单元测试会爆炸,并显示以下异常代码段:
System.InvalidOperationException : This method cannot be called during the application's pre-start initialization stage. at System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled() at System.Web.Compilation.BuildManager.GetReferencedAssemblies()
有什么想法吗?
答案 0 :(得分:4)
我觉得试图在应用程序上实现100%的测试覆盖率并不总是最好的方法。当然,你的应用程序应该经过充分测试,但是将所有内容都放在一边以确保你有100%的覆盖率,这样你就不会关注测试的质量和更多的覆盖范围。覆盖范围只是一个粗略的指导,并没有告诉你,如果你的测试实际上是测试他们应该只是“线x”被调用。
高TC很好,但我会说如果有100%你没有正确测试。我个人不会测试这个。
答案 1 :(得分:2)
将填充路由的代码提取到将RouteCollection作为参数的方法。 然后,您可以在测试中调用它,传递一个空集合并验证它是否包含您需要的所有路径。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default_without_optional_params", // Route name
"{controller}.aspx/{action}", // URL with parameters
new { controller = "Home", action = "Index" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
同样适用于区域。提取一个采用AreaRegistrationContext
。