• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

对ASP.NET5和ASP.NETMVC6应用程序进行集成测试

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

(此文章同时发表在本人微信公众号“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/


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap