[ASP.NET Web API 2] 使用 OWIN 進行整合測試

之前有寫過用 TestServer 測試 Web API,[ASP.NET Identity] 使用 Microsoft.Owin.Testing 測試 OAuth Server 和 Web API,某些情境使用上會失效,比如 Redirect,後來又改用了 OWIN,就比較沒有問題了

 

開發工具

VS 2017 15.9.4

不同版本的 IDE 所產生的範本可能會有所差距

@Web API Project

新增一個 Web 專案,命名為 Server

選擇 Empty,勾選 MVC、Web API

 

新增 API

 

長這樣

 

@UnitTest Project

新增 UnitTest 專案,名為 Client

 

 

然後安裝以下套件

Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
Install-Package Microsoft.Owin.Diagnostics
Install-Package Microsoft.Owin.Host.SystemWeb

別安裝錯了

因為等一下會用到 Server 的 WebApiConfig,由於 Web API 範本跟指令所安裝的 Nuget 套件因為時空關係版本已經不一樣了,所以要先解決版本不一致的問題,我的解法很簡單,就是升級它們

 

加入 Startup Class

public class Startup 
{  
    public void Configuration(IAppBuilder app)
    {
        var configuration= new HttpConfiguration();
        WebApiConfig.Register(configuration);
        //app.UseErrorPage();
        //app.UseWelcomePage("/Welcome");
        app.UseWebApi(configuration);
    }
}


用 WebApp 把 Web API 掛起來

[TestClass] 
public class UnitTest1
{   
    private const string HOST_ADDRESS = "http://localhost:8001";
    private static IDisposable s_webApp;  private static HttpClient s_client;

    [AssemblyInitialize]
    public static void AssemblyInitialize(TestContext context)
    {
        s_webApp = WebApp.Start<Startup>(HOST_ADDRESS);
        Console.WriteLine("Web API started!");
        s_client = new HttpClient();
        s_client.BaseAddress = new Uri(HOST_ADDRESS); 
        Console.WriteLine("HttpClient started!");
    }

    [AssemblyCleanup]
    public static void AssemblyCleanup()
    {
        s_webApp.Dispose();
    }

    [TestMethod]
    public void TestMethod1()
    {
        
    }
}

 

試著運行所有測試,應該要能得到綠燈,這個動作是確認 WebApp 可以順利掛起 WebAPI

接著就可以開始調用WebAPI了

[TestMethod]
public void TestMethod1()
{
    var url = "api/Default/1";
    var response = s_client.GetAsync(url).Result;
    Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
    var content = response.Content.ReadAsStringAsync().Result;
    Assert.AreEqual("\"value\"", content);
}

用這個方法就能輕鬆的針對 WebAPI 真實的測試

範例下載:

https://github.com/yaochangyu/sample.dotblog/tree/master/WebAPI/Lab.TestViaOWIN
 

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo