前文約略提到,以 PactNet 在 Provider 端進行整合測試時,並不能用 WebApplicationFactory<TEntryPoint> 這種「微軟最新的整合測試」,但事實上這哪有多新?早在 ASP.NET Core 2.1 就有了(自打臉,腫腫的)。當時的兩難在於有個 Arrange 不到的地方:
如果讀者與我一樣,為了這個髒髒醜醜的地方坐立難安的話,請參考這個解法,概略可分成幾個步驟:
到這邊建議大家先喘口氣,確認回到舊寫法之後你的 Provider 專案仍然是能正確回應的,像攀岩一樣,三點不動一點動,下一步才走得穩!
好了嗎?接下來看 TestFixture 這段,為了不讓典範太多細節把大家搞迷路了,我採用簡化做法,但各位可以視需要套回 Startup TestStartup 並且再加工客制:
我們可以把 TestFixture 當做是測試程式「起始 SUT」的一段呼叫,若再搭配上第十七~廿二行對照 Program.cs 第四~八行,應更容易理解。
最後別忘了測試程式與 TestFixture 的關聯,在建構時注入(基於前文的單元測試修改):
經以上重構的版本,就可以自動在測試前把受測程式「叫起來」,也不會因為另外有人「已經叫了測試程式,用完又沒關掉」出一些問題囉。