亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

ASP.NET5使用TestServer進行單元測試

2019-11-14 14:34:55
字體:
來源:轉載
供稿:網友

之前如果對 asp.net WebAPI 進行單元測試(HttpClient 發起請求,并且可調試 WebAPI),一般采用 Owin 的方式,具體參考:《開發筆記:用 Owin Host 實現脫離 IIS 跑 Web API 單元測試》

示例代碼:

public class ValuesWebApiTest : IDisposable{    PRivate const string HOST_ADDRESS = "http://localhost:8001";    private IDisposable _webApp;    private HttpClient _httClient;    public AdTextUnitWebApiTest()    {        _webApp = WebApp.Start<Startup>(HOST_ADDRESS);        Console.WriteLine("Web API started!");        _httClient = new HttpClient();        _httClient.BaseAddress = new Uri(HOST_ADDRESS);        Console.WriteLine("HttpClient started!");    }    [Fact]    public async Task Get()    {        var response = await _httClient.GetAsync("/api/values");        if (response.StatusCode != HttpStatusCode.OK)        {            Console.WriteLine(response.StatusCode);            Console.WriteLine((await response.Content.ReadAsAsync<HttpError>()).ExceptionMessage);        }        Assert.Equal(HttpStatusCode.OK, response.StatusCode);        var test = await response.Content.ReadAsStringAsync();        Console.WriteLine(await response.Content.ReadAsStringAsync());    }    public void Dispose()    {        _httClient.Dispose();        _webApp.Dispose();    }}

本來想在 ASP.NET 5 WebAPI 項目中,也用這一套測試代碼,但發現并不適用,因為 ASP.NET WebAPI 2 和 ASP.NET 5 WebAPI 并不是特別一樣,比如 Startup.cs 的配置等等,之前使用 WebApp.Start<Startup>(HOST_ADDRESS) 的方式啟動 WebAPI 項目,而 ASP.NET 5 WebAPI 變成了這樣的:

public static void Main(string[] args) => Webapplication.Run<Startup>(args);

想用 WebApplication.Run 的方式替換掉 WebApp.Start,但發現并不可行,比如 args 的參數問題,自己想的有點簡單了,后來 Google 搜索了一些資料,發現 ASP.NET 5 增加了 TestServer,自己找資料配置了很久,看別人的示例代碼很簡單,但我運行的時候就是各種報錯,主要原因是程序包的版本不對,因為我是按照 project.json 的提示安裝的,比如 Microsoft.AspNet.TestHost 這個程序包,提示最新版本為 1.0.0-rc2-15960,并且沒有 1.0.0-rc1-final 版本,然后我就安裝提示安裝的 rc2,就報下面的異常:

異常信息:Could not load type 'Microsoft.AspNet.Builder.RequestDelegate' from assembly 'Microsoft.AspNet.Http.Abstractions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.

根據提示,我以為異常原因是沒有加載 Microsoft.AspNet.Http.Abstractions 程序集,然后又添加此程序集,重新運行發現還是報錯。。。后面具體的過程就不記錄了,反正坑很大,根本原因是 Microsoft.AspNet.TestHost 程序包的版本不對,應該安裝 1.0.0-rc1-final 版本,我是后來無意間重啟 VS2015 發現的。

下面貼一下 ASP.NET 5 進行單元測試的一些代碼。

首先 ASP.NET 5 WebAPI 項目 Startup.cs 配置代碼:

using Microsoft.AspNet.Builder;using Microsoft.AspNet.Hosting;using Microsoft.Extensions.Configuration;using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Logging;namespace Demo.WebApi{    public class Startup    {        public Startup(IHostingEnvironment env)        {            // Set up configuration sources.            var builder = new ConfigurationBuilder()                .AddJsonFile("appsettings.json")                .AddEnvironmentVariables();            Configuration = builder.Build();        }        public IConfigurationRoot Configuration { get; set; }        // This method gets called by the runtime. Use this method to add services to the container.        public void ConfigureServices(IServiceCollection services)        {            // Add framework services.            services.AddMvc();        }        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)        {            loggerFactory.AddConsole(Configuration.GetSection("Logging"));            loggerFactory.AddDebug();            app.UseIISPlatformHandler();            app.UseStaticFiles();            app.UseMvc();        }        // Entry point for the application.        public static void Main(string[] args) => WebApplication.Run<Startup>(args);    }}

ValuesWebApiTest 測試代碼:

using Microsoft.AspNet.Hosting;using Microsoft.AspNet.TestHost;using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Logging;namespace Demo.WebApiTests{    public class ValuesWebApiTest    {        public TestServer _server;        public ValuesWebApiTest()        {            _server = TestServer.Create(app =>            {                var env = app.ApplicationServices.GetRequiredService<IHostingEnvironment>();                var loggerFactory = app.ApplicationServices.GetRequiredService<ILoggerFactory>();                new CNBlogs.Ad.WebApi.Startup(env).Configure(app, env, loggerFactory);            }, services =>            {                services.AddMvc();                services.Configure();            });        }    }    [Fact]    public async Task Get()    {        var response = await _server.CreateClient().GetAsync("/api/values");        if (response.StatusCode != HttpStatusCode.OK)        {            Console.WriteLine(response.StatusCode);            Console.WriteLine((await response.Content.ReadAsAsync<HttpError>()).ExceptionMessage);        }        Assert.Equal(HttpStatusCode.OK, response.StatusCode);        var test = await response.Content.ReadAsStringAsync();        Console.WriteLine(await response.Content.ReadAsStringAsync());    }}

project.json 配置代碼:

{  "frameworks": {    "dnx451": { }  },  "dependencies": {    "Microsoft.AspNet.Mvc.WebApiCompatShim": "6.0.0-rc1-final",    "Microsoft.Net.Http": "2.2.29",    "Microsoft.AspNet.TestHost": "1.0.0-rc1-final",    "xunit": "2.1.0",    "xunit.runner.dnx": "2.1.0-rc1-build204"  },  "commands": {    "test": "xunit.runner.dnx"  }}

運行測試成功,并且可以 Debug 調試,需要注意 using 引用(沒用的我都去掉了),還有程序包的版本號。

參考資料:

  • Integration testing ASP.NET 5 and ASP.NET MVC 6 applications | StrathWeb. A free flowing web tech monologue.
  • Writing integration tests for ASP.NET 5
  • Testing asp.net 5 vnext middleware from a TestServer - Stack Overflow

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美中文字幕在线视频| 日韩欧美中文在线| 国产精品专区h在线观看| 亚洲日本aⅴ片在线观看香蕉| 国产一区二区久久精品| 亚洲精品成a人在线观看| 国产剧情久久久久久| 欧美网站在线观看| 欧美日韩免费区域视频在线观看| 欧洲精品毛片网站| 91夜夜揉人人捏人人添红杏| 亚洲色图国产精品| 久久深夜福利免费观看| 日韩精品在线观看一区| 亚洲第一av网| 日韩av网址在线观看| 超薄丝袜一区二区| 日韩av资源在线播放| 九九久久国产精品| 高跟丝袜一区二区三区| 国产精品999999| 精品视频在线播放色网色视频| 深夜精品寂寞黄网站在线观看| 2025国产精品视频| 亚洲加勒比久久88色综合| 欧美激情一级精品国产| 国产精品一区二区久久精品| 国产亚洲精品久久久久动| 久久视频这里只有精品| 伊人伊成久久人综合网小说| 91精品国产高清自在线看超| 中文字幕亚洲无线码在线一区| 日韩欧美在线视频免费观看| 国产大片精品免费永久看nba| 久久视频这里只有精品| 欧美多人乱p欧美4p久久| 日韩精品亚洲视频| 538国产精品一区二区免费视频| 亚洲欧美www| 亚洲成在人线av| 91久久中文字幕| 亚洲自拍在线观看| 91av福利视频| 在线观看中文字幕亚洲| 国产日韩在线亚洲字幕中文| 国产99久久久欧美黑人| 欧美国产亚洲视频| 日韩精品免费一线在线观看| 97超级碰碰人国产在线观看| 久久色精品视频| 北条麻妃99精品青青久久| 国产精品日韩一区| 国产日韩欧美在线| 国产精品久久久久免费a∨| 狠狠躁夜夜躁人人爽超碰91| 亚洲а∨天堂久久精品喷水| 久青草国产97香蕉在线视频| 亚洲美女在线看| 欧美在线影院在线视频| 欧美成人精品在线观看| 国产精品96久久久久久又黄又硬| 日韩av在线网址| 狠狠躁夜夜躁人人爽天天天天97| 亚洲全黄一级网站| 亚洲第一免费网站| 欧美精品18videos性欧| 高清欧美性猛交xxxx黑人猛交| 国产精品99久久99久久久二8| 亚洲人在线视频| 国产精品91久久| 国产97人人超碰caoprom| 欧美亚洲伦理www| 欧美专区日韩视频| 黄色91在线观看| 久久久久国产精品免费| 亚洲国产精品yw在线观看| 中文.日本.精品| 国产精品久久综合av爱欲tv| 日韩av综合网| 亚洲精品av在线播放| 欧美另类极品videosbest最新版本| 亚洲理论电影网| 国产日韩中文字幕| 午夜精品免费视频| 日韩美女在线观看一区| 亚洲精品国产欧美| 91久久精品久久国产性色也91| 成人av在线亚洲| 久久久www成人免费精品张筱雨| 精品美女国产在线| 国产亚洲欧美日韩美女| xvideos国产精品| 亚洲香蕉av在线一区二区三区| 久久久成人精品| 欧美极品少妇xxxxx| 国产999精品久久久| 亚洲一区二区三区在线视频| 日韩电影中文字幕一区| 亚洲自拍偷拍第一页| 亚洲综合精品伊人久久| 欧美福利在线观看| 欧美午夜精品久久久久久久| 欧美在线观看一区二区三区| 亚洲第一精品夜夜躁人人躁| 中文字幕av一区二区三区谷原希美| 国内伊人久久久久久网站视频| 久久这里只有精品99| 久久精品国产99国产精品澳门| 欧美成人免费在线视频| 精品人伦一区二区三区蜜桃免费| 国产欧美久久久久久| 欧美极品少妇xxxxⅹ喷水| 中文字幕久热精品在线视频| 中文在线资源观看视频网站免费不卡| 国产精品成人观看视频国产奇米| 欧美极度另类性三渗透| 久久综合88中文色鬼| 96sao精品视频在线观看| 日韩精品在线免费播放| 欧美另类暴力丝袜| 久久久国产一区二区三区| 国产精品久久久久久婷婷天堂| 奇米影视亚洲狠狠色| 日本成人免费在线| 在线观看久久av| 国产在线不卡精品| 国内精品免费午夜毛片| 精品久久久久国产| 亚洲国产97在线精品一区| 国产精品美女主播在线观看纯欲| 亚洲激情久久久| 久久久久www| 中文字幕精品—区二区| 美女视频久久黄| 黑人巨大精品欧美一区二区一视频| 粉嫩av一区二区三区免费野| 亚洲网站在线观看| 欧美在线视频一二三| 成人福利在线视频| 日产日韩在线亚洲欧美| 欧日韩在线观看| 国产精品成人免费电影| 欧美一区二区三区图| 国产主播在线一区| 亚洲国产欧美久久| 正在播放国产一区| 91产国在线观看动作片喷水| 国产精品福利观看| 日本成人免费在线| 亚洲精品久久久久久下一站| 国产日本欧美一区| 日韩视频欧美视频| 性色av一区二区咪爱| 亚洲精品97久久| 日本一区二区在线免费播放| 欧美一区二区大胆人体摄影专业网站| 午夜精品99久久免费| 国产精品偷伦免费视频观看的| 日韩av在线直播| 77777少妇光屁股久久一区| 国内精品美女av在线播放| 一夜七次郎国产精品亚洲| 欧美成人一区在线| 中文字幕视频一区二区在线有码|