asp.net-mvc – 集成测试MVC应用程序,没有UI自动化的痛苦
我正在开发一个新的MVC应用程序,该应用程序将主要使用TDD编写.我想添加一些集成测试,以确保完全连线的应用程序(我正在使用StructureMap for IOC,NHibernate for persistence)按预期工作.
虽然我打算用Selenium编写一些功能性烟雾测试,但出于可维护性的原因,我宁愿通过使用旧的C#在我的控制器上直接调用操作来进行大部分集成测试. 关于如何实现这一目标的指导令人惊讶,因此我对攻击计划进行了抨击 >将所有引导代码从Global.asax中拉出并放入单独的类中 我已经完成了第1步,但实际上不知道如何继续第2步.任何指导都将不胜感激. public class Bootstrapper { public static void Bootstrap() { DependencyResolverInitializer.Initialize(); FilterConfig.RegisterFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); ModelBinders.Binders.DefaultBinder = new SharpModelBinder(); } } public class DependencyResolverInitializer { public static Container Initialize() { var container = new Container(); container.Configure(x => x.Scan(y => { y.Assembly(typeof(Webmin.UI.FilterConfig).Assembly); y.WithDefaultConventions(); y.LookForRegistries(); })); DependencyResolver.SetResolver(new StructureMapDependencyResolver(container)); return container; } } public class StructureMapDependencyResolver : IDependencyResolver { private readonly IContainer _container; public StructureMapDependencyResolver(IContainer container) { _container = container; } public object GetService(Type serviceType) { if (serviceType.IsAbstract || serviceType.IsInterface) { return _container.TryGetInstance(serviceType); } return _container.GetInstance(serviceType); } public IEnumerable<object> GetServices(Type serviceType) { return _container.GetAllInstances(serviceType).Cast<object>(); } } 解决方法
如果您希望在不通过UI的情况下对ASP.NET MVC应用程序进行自动端到端测试,那么一种好的方法是以编程方式将HTTP请求发送到不同的URL并在之后断言系统的状态.
您的集成测试基本上如下所示: >安排:启动Web服务器以托管正在测试的Web应用程序 您可以使用CassiniDev轻松地在进程内Web服务器中托管ASP.NET Web应用程序.此外,以编程方式发送HTTP请求的一种便捷方法是使用Microsoft ASP.NET Web API Client Libraries. 这是一个例子: [TestFixture] public class When_retrieving_a_customer { private CassiniDevServer server; private HttpClient client; [SetUp] public void Init() { // Arrange server = new CassiniDevServer(); server.StartServer("..relativepathtowebapp",80,"/","localhost"); client = new HttpClient { BaseAddress = "http://localhost" }; } [TearDown] public void Cleanup() { server.StopServer(); server.Dispose(); } [Test] public void Should_return_a_view_containing_the_specified_customer_id() { // Act var response = client.GetAsync("customers/123").Result; // Assert Assert.Contains("123",response.Content.ReadAsStringAsync().Result); } } 如果你正在寻找一个更完整的技术实例,你可以在我的sample MVC 4 web application中找到它,我在写作automated acceptance tests的背景下展示了它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.NET MVC:正确的地方为部分视图?
- 在asp.net.mvc中,什么是正确的方法来引用css内的图像
- Asp.net MVC实现生成Excel并下载功能
- asp.net-mvc – 没有找到与名为“User”的控制器匹配的类型
- asp.net-mvc-routing – 获取错误的路由并且ActionLink生成
- asp.net – ValidateRequest = False但是在行动中它仍然是T
- asp.net-web-api – 在运行时禁用ApiController
- 如何知道asp.net 3.5 sp1和asp.net mvc是否安装在服务器中?
- asp.net-mvc – UserManager.AddPasswordAsync()返回“Name
- asp.net-mvc-2 – 什么是Html.Validate和Html.ValidateFor方
- asp.net-mvc – ActionLink MVC中的图像按钮
- asp.net-mvc – 更新用户声明不起作用.为什么?
- asp.net – MVC应用程序中的Aspx母版页
- asp.net-mvc – IIS 8 Express不提供页面
- asp.net-mvc – 加载登录表单时网站速度慢
- 代码翻译:ASP.NET Server.Transfer in PHP
- asp.net – 限制可以输入’textarea’的文本数量
- asp.net – 无法将“ASP._Page__ViewStart_cshtm
- Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ex
- ASP.NET缩小并连接App_Themes CSS文件