之前有寫過用 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.DiagnosticsInstall-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