.NET Framework 4.6.1 MVC集成测试可行方案咨询
针对.NET Framework 4.6.1 MVC应用的集成测试可行方案
一、修复OWIN TestServer的404问题
- 确保OWIN启动类显式注册MVC路由:不要依赖原
Global.asax的路由配置,在Startup.cs中手动添加路由注册逻辑:public void Configuration(IAppBuilder app) { // 注册默认MVC路由 RouteTable.Routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); // 启用MVC中间件 app.UseMvc(); // 其他OWIN中间件配置(如身份验证等) } - 同步应用配置到测试项目:将主应用的
Web.config复制到测试项目,设置为“复制到输出目录”(如果测试项目未自动引用),避免因配置缺失导致路由或服务初始化失败。 - 测试请求使用完整路由路径:调用TestServer时,确保请求URI完全匹配路由规则,比如使用
http://testserver/Home/Index而非简写路径。
二、保留Global.asax的混合集成方案
如果替换Global.asax引发路由适配问题,可保留原有文件并集成OWIN:
- 在
Global.asax.cs的Application_Start中初始化OWIN:protected void Application_Start() { // 保留原有MVC初始化代码 AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); // 启动OWIN服务器 Microsoft.Owin.Hosting.WebApp.Start<Startup>("http://localhost:8081"); } - 测试时使用
HttpClient访问本地端口:放弃内存TestServer,直接请求本地启动的OWIN服务,既保留原有路由逻辑,又能通过OWIN处理请求。
三、Selenium+IIS Express的Azure CI自动化方案
针对CI管道的自动执行需求,通过脚本启动IIS Express配合Selenium:
- 编写PowerShell启动脚本(保存为
start-iis.ps1):$iisPath = "${env:ProgramFiles(x86)}\IIS Express\iisexpress.exe" $appRoot = "$(System.DefaultWorkingDirectory)\YourMvcApp" $port = "8082" # 启动IIS Express Start-Process $iisPath -ArgumentList "/path:$appRoot /port:$port" -NoNewWindow # 等待服务器初始化完成 Start-Sleep -Seconds 12 - Azure CI管道配置步骤:
steps: - task: PowerShell@2 inputs: filePath: 'start-iis.ps1' workingDirectory: '$(System.DefaultWorkingDirectory)' - task: VSTest@2 inputs: testAssemblyVer2: '**\*SeleniumTests.dll' searchFolder: '$(System.DefaultWorkingDirectory)' - task: PowerShell@2 inputs: script: 'Stop-Process -Name iisexpress -Force -ErrorAction SilentlyContinue' - Selenium测试代码示例:
[TestClass] public class HomePageTests { private IWebDriver _driver; [TestInitialize] public void Setup() { _driver = new ChromeDriver(); _driver.Navigate().GoToUrl("http://localhost:8082/Home/Index"); } [TestMethod] public void HomePage_LoadsSuccessfully() { Assert.IsTrue(_driver.Title.Contains("Home Page")); } [TestCleanup] public void Teardown() { _driver.Quit(); } }
四、使用专用MVC测试框架
尝试针对.NET Framework MVC的集成测试库AspNetMvcTestFramework:
- 安装NuGet包:
Install-Package AspNetMvcTestFramework - 编写测试代码,直接模拟请求并验证响应:
[Test] public void Home_Index_Returns_Ok_Status() { var tester = new MvcTester<MvcApplication>(); var response = tester.Get("/Home/Index"); Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); }
内容的提问来源于stack exchange,提问作者Hebert Ferreira
相关产品推荐
相关产品推荐

