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

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

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

2019-11-14 14:25:53
字體:
來源:轉載
供稿:網友

之前如果對 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
久久精品欧美视频| 久久久久久美女| 91久久久久久久久| 亚洲欧洲在线播放| 中文精品99久久国产香蕉| 欧美另类99xxxxx| 亚洲午夜精品久久久久久性色| 91视频国产精品| 97在线看福利| 国产福利精品视频| 91极品女神在线| 人人澡人人澡人人看欧美| 国产精品亚洲综合天堂夜夜| 91精品国产91久久久久福利| 国产精品久久久久久久9999| 久久久91精品国产一区不卡| 久久国产精彩视频| 国产精品网站视频| 国产日韩精品在线播放| 亚洲人a成www在线影院| 欧美有码在线视频| 国产精品久久久久av免费| 欧美大成色www永久网站婷| 美女黄色丝袜一区| 欧美激情第三页| 日韩免费精品视频| 国产视频综合在线| 亚洲人成网站免费播放| 久久久久久尹人网香蕉| 国产999精品久久久| 91精品国产综合久久香蕉的用户体验| 国产在线精品一区免费香蕉| 亚洲最大成人免费视频| 91精品国产高清自在线看超| 日韩中文字幕网址| 日韩中文字幕第一页| 日韩精品欧美国产精品忘忧草| 欧美视频在线看| 国产精品国语对白| 97在线视频免费观看| 久久视频这里只有精品| 亚洲偷熟乱区亚洲香蕉av| 欧美丝袜美女中出在线| 欧美精品生活片| 日韩在线小视频| 欧美第一页在线| 91国产视频在线播放| 日本高清不卡的在线| 国产精品吹潮在线观看| 色综合91久久精品中文字幕| 成人激情综合网| 国产国语videosex另类| 久久综合久久八八| 国产精自产拍久久久久久| 国产激情999| 日韩在线高清视频| 亚洲黄色av女优在线观看| 91tv亚洲精品香蕉国产一区7ujn| 日韩大胆人体377p| 亚洲最大在线视频| 亚洲va久久久噜噜噜| 亚洲性av网站| 国产欧美精品一区二区三区介绍| 国产日韩精品在线播放| 亚洲午夜国产成人av电影男同| 91在线播放国产| 欧美电影在线观看网站| 色吧影院999| 久久人人爽人人爽爽久久| 久久精品99久久香蕉国产色戒| 欧美另类暴力丝袜| 亚洲精品日韩久久久| 欧美整片在线观看| 欧美疯狂xxxx大交乱88av| 欧美诱惑福利视频| 久久久久久久激情视频| 日韩视频免费大全中文字幕| 国产精品一区电影| 日韩激情第一页| 另类色图亚洲色图| 日韩精品视频免费专区在线播放| 国产日韩换脸av一区在线观看| 日韩精品亚洲视频| 国产精品99久久99久久久二8| 国产suv精品一区二区三区88区| 欧美精品在线第一页| 精品久久中文字幕久久av| 欧美性极品少妇精品网站| 亚洲精品成人久久| 国产欧美va欧美va香蕉在线| 日韩暖暖在线视频| 亚洲国产精品嫩草影院久久| 国产精品电影观看| 日韩精品视频在线| 欧美精品久久久久久久久| 最近的2019中文字幕免费一页| 国产拍精品一二三| 亚洲欧洲视频在线| 色综合老司机第九色激情| 国产成人免费av| 国产亚洲视频在线观看| 成人情趣片在线观看免费| 国产精品专区第二| 日韩动漫免费观看电视剧高清| 欧美在线播放视频| 色综合91久久精品中文字幕| 97视频免费观看| 欧美午夜www高清视频| 欧美电影免费观看网站| 成人黄色av播放免费| 欧美专区中文字幕| 欧美一级视频一区二区| 色妞一区二区三区| 蜜月aⅴ免费一区二区三区| 一区二区三区亚洲| 亚洲成人动漫在线播放| 欧美日韩亚洲精品内裤| 国产91精品黑色丝袜高跟鞋| 欧美精品久久久久久久免费观看| 国产精品丝袜久久久久久高清| 欧美激情亚洲激情| 亚洲日韩第一页| 精品久久国产精品| 伊人久久精品视频| 91精品国产网站| 日本国产一区二区三区| 久久久噜噜噜久久中文字免| 国产一区二区视频在线观看| 国产日本欧美视频| 91免费看国产| 国产精品老女人视频| 亚洲人成电影网| 国产精品视频不卡| 中文字幕在线成人| 国产精品免费网站| 亚洲日本中文字幕免费在线不卡| 欧美精品videos| 国产精品日韩欧美综合| 国产日韩精品在线播放| 欧美亚洲激情在线| 亚洲电影av在线| 青青草99啪国产免费| 亚洲欧美国产一区二区三区| 欧美中文字幕精品| 日本aⅴ大伊香蕉精品视频| 久久艳片www.17c.com| 国产精品视频中文字幕91| 丝袜一区二区三区| 日韩av色在线| 日本中文字幕不卡免费| 青青精品视频播放| 亚洲日本欧美日韩高观看| 欧美老女人xx| 国产精品99久久久久久www| 欧美国产日韩中文字幕在线| 91中文在线视频| 欧美日韩国产一区二区三区| 欧美激情久久久| 日韩欧美福利视频| 国产免费一区视频观看免费| 精品国产一区二区三区久久久狼| 国产精品91久久| 国产美女扒开尿口久久久| 91精品国产综合久久香蕉的用户体验|