系列目录

从.net到.net core以后,微软非常努力,以每年一到两个大版本的频率在演进.net core,去年相继发布了.net core 2.1和2.2,其中2.1是长期支持版,不断的快速更新一方面快速弥补了相比.net framework缺失的api,同时也带来了不少激进性的改变,导致很多api,尤其是较传统framework相比新增的api不断调整,有些api在上一个版本还能用,结果到下一个版本就不支持了.升级到2.1以后,微软就更改了集成测试服务器的包名并改变了2.0的接口,进行了更高层次的封装,降低了使用配置难度.但是截至写本文时VisualStudio工具支持仍然不是太好,需要手动修改csproj文件.但是这个工作也是一次性的.配置好了就ok啦.

看到这里可能有些同志会担心接口变化很大以前学的东西都白瞎了,其实不然,只是创建TestServer的方式变了,我们实际测试中用到的最多的是HttpClient这个对象,它并没有变.

下面就介绍一下.net core 2.1下如何搭建一个内存集成测试服务器.

首先我们新建一个.net core 2.1的mvc项目,并创建一个Xunit单元测试项目,引用刚创建的这个mvc项目,关于创建跟前面一样,这里不再赘述.

下载以下两个包:Microsoft.AspNetCore.App和Microsoft.AspNetCore.Mvc.Testing

我们创建一个名为netcoremvc21的测试类,它的代码如下

  1. public class netcoremvc21: IClassFixture<WebApplicationFactory<CoreMvc21.Startup>>
  2. {
  3. //private readonly WebApplicationFactory<CoreMvc21.Startup> _factory;
  4. private HttpClient client;
  5. public netcoremvc21(WebApplicationFactory<CoreMvc21.Startup> factory)
  6. {
  7. this.client = factory.CreateClient();
  8. }
  9. [Fact]
  10. public async Task GetTest()
  11. {
  12. var response = await client.GetAsync("/Home/Hello");
  13. response.EnsureSuccessStatusCode();
  14. var responseStr = await response.Content.ReadAsStringAsync();
  15. Assert.Equal("Hello,world", responseStr);
  16. }
  17. }
  18. }

我们创建的项目实现了IClassFixture泛型接口,前面我们讲了这个接口的作用了,这里不再赘述,它里面的泛型参数是一个WebApplicationFactory泛型对象,这个对象是微软提供好的,不需要我们自己创建,这个泛型对象的参数是一个TEntryPoint对象,其实就是指定程序的startup文件(这里我们提供的是mvc项目的startup文件,这个项目名为CoreMvc21).它其实是把创建内存测试服务器的方法给封装了,类似我们前面的封装,减少了手写代码量,并且提供了最佳实践,我们前面说到过,如果对Xunit不熟悉在构造函数里创建非托管对象非造成严重性能问题.

下面的测试代码和前面的并没太大区别,都是通过httpclient对象构造请求.

测试接口数据没问题,我们再来看看这次是没有配置ContentRoot的,程序能不能正常找到页面

测试代码如下

  1. [Fact]
  2. public async Task GetTest()
  3. {
  4. var response = await client.GetAsync("/Home/index");
  5. response.EnsureSuccessStatusCode();
  6. var responseStr = await response.Content.ReadAsStringAsync();
  7. Assert.Contains("myCarousel", responseStr);
  8. }

以上代码测试也是通过的,也就是我们不需要额外的配置,基本功能都能正常运行了.当前以上能正常运行的前提是项目是按惯例配置的,如果你的资源文件和项目不在同一个目录下,则以上就不能正常工作了,此时我们可以继承WebApplicationFactory<TEntryPoint>来自定义配置,和前面.net core 2.0的配置基本类似.

可能有些同事会有疑问,这里的工作环境也没有配置,它是不是Development环境呢,答案是的.

截至到发文时,.net core已经到 3.0 preview 7了.由于工作比较忙,加之对新技术新框架不像以前那样有激情了,笔者并没有试用过.net core 3.0.以上的方法仅适用于.net core 2.1和2.2两个版本(不适用于2.0版本,关于2.0版本的集成测试本系列也有介绍,感兴趣的朋友可以翻阅一下).

.netcore持续集成测试篇之 .net core 2.1项目集成测试的更多相关文章

  1. 持续集成篇_08_Hudson持续集成服务器的使用(自动化编译、分析、打包、部署)

    持续集成篇_08_Hudson持续集成服务器的使用(自动化编译.分析.打包.部署) 1.创建任务 svn用户验证 验证通过 *****五颗*表示每分钟检查svn路径是否有变更,有变更就会重新构建,相当 ...

  2. ASP.NET Core 学习笔记 第一篇 ASP.NET Core初探

    前言 因为工作原因博客断断续续更新,其实在很早以前就有想法做一套关于ASP.NET CORE整体学习度路线,整体来说国内的环境的.NET生态环境还是相对比较严峻的,但是干一行爱一行,还是希望更多人加入 ...

  3. ASP.NET Core 学习笔记 第五篇 ASP.NET Core 中的选项

    前言 还记得上一篇文章中所说的配置吗?本篇文章算是上一篇的延续吧.在 .NET Core 中读取配置文件大多数会为配置选项绑定一个POCO(Plain Old CLR Object)对象,并通过依赖注 ...

  4. [最新].NET Core ORM 开源项目一览,持续更新

    截至2019-05-08共收集27个 .NET Core ORM 开源项目,38个 .NET ORM 开源项目. .NET Core ORM 开源项目收集地址:https://github.com/o ...

  5. ASP.NET Core 学习笔记 第四篇 ASP.NET Core 中的配置

    前言 说道配置文件,基本大多数软件为了扩展性.灵活性都会涉及到配置文件,比如之前常见的app.config和web.config.然后再说.NET Core,很多都发生了变化.总体的来说技术在进步,新 ...

  6. ASP.NET Core 介绍和项目解读

    标签: ASP.NETCore 1. 前言 2. ASP.NET Core 简介 2.1 什么是ASP.NET Core 2.2 ASP.NET Core的特点 2.3 ASP.NET Core 项目 ...

  7. NET Core:部署项目到Ubuntu Server

    NET Core:部署项目到Ubuntu Server 概述 基于上一篇成功安装Ubuntu Server 16.10的基础上,接下来继续我们ASP.NET Core项目的部署之旅! 只是对于这些年整 ...

  8. 详解Net Core Web Api项目与在NginX下发布

    前言 本文将介绍Net Core的一些基础知识和如何NginX下发布Net Core的WebApi项目. 测试环境 操作系统:windows 10 开发工具:visual studio 2019 框架 ...

  9. Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员、后台管理员同时登录

    1.登录的实现 登录功能实现起来有哪些常用的方式,大家首先想到的肯定是cookie或session或cookie+session,当然还有其他模式,今天主要探讨一下在Asp.net core 2.0下 ...

随机推荐

  1. jekyll搭建个人博客2

    目录 个性化 jekyll目录结构 修改个人信息 修改头像 修改背景颜色 关于头像的效果 图片问题 域名 个性化 jekyll目录结构 个性化就是要对文件内容作出修改,使得博客外观发生变化,在修改文件 ...

  2. 【基础算法-模拟-例题-*校长的问题】-C++

    为什么在题目前面打上星号呢? 这道题的正解不是模拟! 正解树状数组! 正解树状数组! 正解树状数组! 重要的事情说够三遍了! 但是,歪解模拟因为数据水都能AC! 因为这道题放在模拟专题中,所以我们就讨 ...

  3. vs2010 安装项目完成桌面快捷方式无法定位程序文件夹 解决方法

    本文转载自http://www.cnblogs.com/jasonxuvip/archive/2012/07/13/2589952.html 软件打包工具有很多种,让人不知道选那个方便自己使用,Tig ...

  4. C#3.0新增功能09 LINQ 标准查询运算符 03 按执行方式的分类

    连载目录    [已更新最新开发文章,点击查看详细] 标准查询运算符方法的 LINQ to Objects 实现主要通过两种方法之一执行:立即执行和延迟执行.使用延迟执行的查询运算符可以进一步分为两种 ...

  5. [leetcode] 72. Edit Distance (hard)

    原题 dp 利用二维数组dp[i][j]存储状态: 从字符串A的0~i位子字符串 到 字符串B的0~j位子字符串,最少需要几步.(每一次删增改都算1步) 所以可得边界状态dp[i][0]=i,dp[0 ...

  6. 二十、Sql Server 保留几位小数的两种做法

    问题: 数据库里的 float momey 类型,都会精确到多位小数.但有时候 我们不需要那么精确,例如,只精确到两位有效数字. 解决: 1. 使用 Round() 函数,如 Round(@num,2 ...

  7. 《VR入门系列教程》之5---应用方向

    VR应用方向     面向消费者的虚拟现实才发展了几年,就出现了大量应用程序,虚拟现实抓住了人们对未来的渴望.开发者甚至想要把整个现实世界都做成虚拟现实,这些都是可以理解的.     但是,现在仍然没 ...

  8. TP框架基础 (二) ---空控制器和空操作

    通过之前的学习我们知道了index.php是一个入口文件,如果没有这个入口文件的话,我们需要自己创建! [视图模板文件创建] 视图模板文件存放发位置在: 里面没有模板文件 如果我们想要访问Login控 ...

  9. centOS7 安装mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar

    在虚拟机上安装mysql走了不少弯路,在此备份... 首先感谢下这几篇博客提供的帮助: https://www.cnblogs.com/pythonal/p/6141516.html http://b ...

  10. 一文带你了解Java反射机制

    想要获取更多文章可以访问我的博客 - 代码无止境. 上周上班的时候解决一个需求,需要将一批数据导出到Excel.本来公司的中间件组已经封装好了使用POI生成Excel的工具方法,但是无奈产品的需求里面 ...