zoukankan      html  css  js  c++  java
  • 对ASP.NET 5和ASP.NET MVC 6应用程序进行集成测试

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

  • 相关阅读:
    主成分分析法(PCA)答疑
    搜索引擎的高级用法
    Makefile 编写实例
    GCC常用命令
    一个进程最多能开多少个线程?
    归并排序
    选择排序(数组、链表)
    求连续子数组的最大和
    生产者-消费者问题(1)
    基于cmake编译安装MySQL-5.5
  • 原文地址:https://www.cnblogs.com/redmoon/p/4532030.html
Copyright © 2011-2022 走看看