码迷,mamicode.com
首页 > Web开发 > 详细

对ASP.NET 5和ASP.NET MVC 6应用程序进行集成测试

时间:2015-05-27 00:39:20      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注。)

题记:之前有文章谈到如何对ASP.NET 5的应用程序进行单元测试(需使用xunit),今天的文章会讲解如何进行集成测试。

对ASP.NET MVC或ASP.NET WEB API进行集成测试,一般的做法是在单元测试框架中启动一个Self-Host,测试结束再关闭。但是这种方法有个问题,整个测试过程会涉及操作系统的网络调用栈,也称之为“Wire”。而对于测试,“Wire”往往是不必要的,也会造成性能损失,使测试不能快速完成。因而,还有一种更好的做法是,启动一个内存Host,比如HttpServer或Microsoft.Owin.Testing这个包当中的TestServer。

进入DNX世界后,要对ASP.NET 5和ASP.NET MVC 6的应用程序进行这种方式的集成测试,微软也提供了相应的Nuget包供我们使用,就是Microsoft.AspNet.TestHost。TestHost可以让你直接调用现有的Startup文件。

当然,要进行测试还是需要xunit,需要添加“xunit”和“xunit.runner.dnx”包。

接着就可以编写测试代码了。首先用Startup来创建所需的IApplicationBuilder和IServicesCollection实例供稍后使用:

var environment = CallContextServiceLocator.Locator.ServiceProvider.GetRequiredService<IApplicationEnvironment>();

var startup = new Startup(new HostingEnvironment(environment));
_app = startup.Configure;
_services = startup.ConfigureServices;

接着为每个测试,新建一个TestServer,而TestServer暴露了一个CreateClient的方法,通过这个方法得到一个client来模拟客户端调用Web API的行为。代码如下:

// Arrange
var server = TestServer.Create(_app, _services);
var client = server.CreateClient();
 
// Act
var response = await client.GetAsync("http://localhost/api/values");
var deserialized = await response.Content.ReadAsStringAsync();
 
// Assert
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
Assert.Equal(@"[""value1"",""value2""]", deserialized);

最后就可以在Visual Studio的Test Explorer中运行这些测试了。更多详细内容,可以“阅读原文”来查看。

原文地址:http://www.strathweb.com/2015/05/integration-testing-asp-net-5-asp-net-mvc-6-applications/

对ASP.NET 5和ASP.NET MVC 6应用程序进行集成测试

标签:

原文地址:http://www.cnblogs.com/redmoon/p/4532030.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!