選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
3 分鐘閱讀時間 (551 個字)

回到過去 - 避免 PactNet 整合測試的困擾

https://github.com/pact-foundation/pact-net?tab=readme-ov-file#verifying-a-provider

前文約略提到,以 PactNet 在 Provider 端進行整合測試時,並不能用 WebApplicationFactory<TEntryPoint> 這種「微軟最新的整合測試」,但事實上這哪有多新?早在 ASP.NET Core 2.1 就有了(自打臉,腫腫的)。當時的兩難在於有個 Arrange 不到的地方:

  • Provider.Tests 整合測試前,必須手動執行 Provider 受測程式
    • 測試成功:合約已完成
    • 測試失敗:合約未完成
  • Provider.Tests 整合測試前並未執行 Provider 受測程式:拋出例外,無法完成合約驗證

如果讀者與我一樣,為了這個髒髒醜醜的地方坐立難安的話,請參考這個解法,概略可分成幾個步驟:

  • 恢復 MVC Controller-based API 舊寫法
    • Program.cs
    • Controller
  • 實作「測試程式」=> TestFixture => TestStartup => Startup 這樣的典範路徑,把 Arrange 細節藏起來,或像我簡化的做法後敘
Program.cs 比起以往稍微多兩個地方,如上圖第五、第七行。同時具有 MVC 與 MinimalAPI 開發經驗的人們,也許勾起了一些回憶?另外,以前可以全塞進 Program.cs 的一大堆 EntryPoints 全都得乖乖拔出來,形式上如下:

到這邊建議大家先喘口氣,確認回到舊寫法之後你的 Provider 專案仍然是能正確回應的,像攀岩一樣,三點不動一點動,下一步才走得穩!

好了嗎?接下來看 TestFixture 這段,為了不讓典範太多細節把大家搞迷路了,我採用簡化做法,但各位可以視需要套回 Startup TestStartup 並且再加工客制:

我們可以把 TestFixture 當做是測試程式「起始 SUT」的一段呼叫,若再搭配上第十七~廿二行對照 Program.cs 第四~八行,應更容易理解。

最後別忘了測試程式與 TestFixture 的關聯,在建構時注入(基於前文的單元測試修改):

經以上重構的版本,就可以自動在測試前把受測程式「叫起來」,也不會因為另外有人「已經叫了測試程式,用完又沒關掉」出一些問題囉。

iota C.ai 產品開發的⾃動化測試—使用SideeX(Rapi前身)
CDC Testing
 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2025/05/09, 週五

Captcha 圖像