我的作法是在測試專案用OWIN把 WebApp 掛起來,測試案例便可直接打進 Web API,需要外部注入來改變內部狀態時,就不能像以前呼叫 Class,我想到了一些作法,比如組態擋、#if、Header,這裡就分享 Header 的做法
開發環境
- VS 2017.15.9.4
-
專案建置步驟請參考 [Web API] 使用 OWIN 進行測試
直接看代碼
ApiController 會依賴這個方法,當有特定 Header 請求的時候,就聽 Header 的狀態,沒有就用自己的狀態,以下用時間當範例
public static DateTime GetNow(HttpRequestMessage request) { var testNow = request.Headers .FirstOrDefault(x => x.Key == "X-TestNow") .Value? .FirstOrDefault(); if (string.IsNullOrWhiteSpace(testNow)) { return DateTime.Now; } var decodeNow = Encoding.UTF8.GetString(Convert.FromBase64String(testNow)); return DateTime.Parse(decodeNow); }
為了方便讓每一個案例套用,我在 HttpClient 生成的時候變注入時間,當然,你也可以依照需求注入你需要的時間
s_webApp = WebApp.Start<Startup>(HOST_ADDRESS); Console.WriteLine("Web API started!"); HttpClient = new HttpClient(); HttpClient.BaseAddress = new Uri(HOST_ADDRESS); var base64Now = Convert.ToBase64String(Encoding.UTF8.GetBytes(TestNow.ToString())); HttpClient.DefaultRequestHeaders.Add("X-TestNow", base64Now)
這樣一來就能注入我想注入的東西了
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET