天天看點

用Owin Host實作脫離IIS跑Web API單元測試第一步 建立控制台項目&&安裝Nuget包第二步 建立操作類開始進行單元測試

目前文章閱讀前推薦閱讀 OwinSelfHost自宿主的使用 文章

操作步驟與上述文章結構大緻雷同:

第一步 建立控制台項目&&安裝Nuget包

Install-package Microsoft.AspNet.WebApi.OwinSelfHost

第二步 建立操作類

Startup.cs

對OwinHost 所需的webapi配置

public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            var configuraton = new HttpConfiguration();

            configuraton.MapHttpAttributeRoutes();

            app.UseWebApi(configuraton);
        }
    }           

複制

ApiController

WebApi控制器的具體執行個體

public class CommentsController : ApiController
    {
        [Route("blogposts/{postId}/comments")]
        public async Task<IHttpActionResult> Get(int postId)
        {
            var comments = new Comment[] { new Comment {
                PostId = postId,
                Body = "Coding changes the world1" } };
            return Ok<Comment[]>(comments);
        }
    }

    public class Comment
    {
        public int PostId { get; set; }
        public string Body { get; set; }
    }           

複制

建立測試類

CommentsWebApiTest

使用OwinHost的方法脫離IIS的WebApi測試類

public class CommentsWebApiTest : IDisposable
    {
        private const string HOST_ADDRESS = "http://localhost:8001";
        private IDisposable _webApp;
        private HttpClient _httClient;
        public CommentsWebApiTest()
        {
            _webApp = WebApp.Start<Startup>(HOST_ADDRESS);
            Console.WriteLine("Web API started!");
            _httClient = new HttpClient();
            _httClient.BaseAddress = new Uri(HOST_ADDRESS);
            Console.WriteLine("HttpClient started!");
        }

        public void Dispose()
        {
            _webApp.Dispose();
        }

        [Fact]
        public async Task GetComments()
        {
            var postId = 1;
            var response = await _httClient.GetAsync($"http://localhost:8001/blogposts/1/comments");
            if (response.StatusCode != HttpStatusCode.OK)
            {
                Console.WriteLine(response.Content.ReadAsStringAsync());
            }
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            var comments = await response.Content.ReadAsAsync<Comment[]>();
            Assert.NotEmpty(comments);
            Assert.Equal(postId, comments[0].PostId);
            Assert.Equal("Coding changes the world1", comments[0].Body);
        }
    }           

複制

測試标簽和類庫引用

當使用測試标簽的時候,[Fact],無法發現無法添加引用,如下圖
用Owin Host實作脫離IIS跑Web API單元測試第一步 建立控制台項目&amp;&amp;安裝Nuget包第二步 建立操作類開始進行單元測試

圖中所訓示的地方如果出現引用問題,可以參照以下步驟進行引用

1.點選vs2017的工具->nuget包管理->解決方案的nuget程式包,在“”浏覽“下輸入“xunit”,選擇xunit,然後選擇步驟一中建立的項目,點選安裝

用Owin Host實作脫離IIS跑Web API單元測試第一步 建立控制台項目&amp;&amp;安裝Nuget包第二步 建立操作類開始進行單元測試

2.其實此時的測試管理器根本就未運作單元測試,必須要借助xUnit中的運作環境,利用測試管理器來運作VS中的測試,此時我們繼續在單元測試中通過NuGet安裝xunit.runner.visualstudio,

點選vs2017的工具->nuget包管理->解決方案的nuget程式包,在“”浏覽“下輸入“xunit.runner.visualstudio”,選擇xunit.runner.visualstudio,然後選擇步驟一中建立的項目,點選安裝

用Owin Host實作脫離IIS跑Web API單元測試第一步 建立控制台項目&amp;&amp;安裝Nuget包第二步 建立操作類開始進行單元測試

開始進行單元測試

編寫單元測試代碼後,右鍵點選“運作測試“”,即可執行單元測試,測試代碼在背景直接運作,如果是點選“調試測試”,即可對測試單元進行斷點調試

用Owin Host實作脫離IIS跑Web API單元測試第一步 建立控制台項目&amp;&amp;安裝Nuget包第二步 建立操作類開始進行單元測試

點選“運作測試”後會在Vs編輯器下方出現一個"測試資料總管?imageView2/2/w/1620",在其中可以對所有的單元測試結果進行檢視,如下圖所示

用Owin Host實作脫離IIS跑Web API單元測試第一步 建立控制台項目&amp;&amp;安裝Nuget包第二步 建立操作類開始進行單元測試