簡體   English   中英

PACT - 處理提供者服務狀態並使用模擬或實際數據庫運行實際提供者

[英]PACT - Handling provider service state and running actual provider with mocked or actual database

我是 PACT 的新手,並嘗試使用 pact-net 進行 .net 微服務的合同測試。 我理解生成協議文件的消費者測試的概念。 有一個提供者狀態中間件的概念,它負責確保提供者的狀態與生成的協議中的 Given() 條件相匹配。 我對以下內容或如何實現這一點感到有些困惑:

提供者測試針對實際服務運行。 所以我們在運行測試之前啟動提供者服務。 我的提供者服務與數據庫交互以存儲和檢索記錄。 PACT 還提到服務的所有依賴項都應該被存根。

  1. 所以我們運行針對實際數據庫運行的實際提供者 api?
  2. 如果我們針對實際數據庫運行 api,我們如何將數據注入數據庫? 我們應該使用提供者 api 自己的端點來添加 Given() 數據嗎?
  3. 如果以上不是正確的方法,那么什么是正確的方法?

我遇到的所有基本博客文章都沒有解釋這一點,並且通常有沒有提供程序狀態或狀態只是文件系統上的一些文本文件的示例。

幫助表示贊賞。

提供者測試針對實際服務運行

您的意思是針對實時環境,還是針對單元測試在本地運行的實際服務(不推薦前者,因為上面的(2))。

  1. 這是該規則的例外之一。 您可以選擇使用真正的數據庫或內存中的數據庫 - 無論哪種最方便。 使用 docker 和類似工具進行測試是很常見的。

  2. 在您的情況下,我有一組特定的僅測試路由來響應提供者狀態處理程序端點,它們也可以訪問存儲庫代碼並可以操縱系統狀態。

我要補充馬特的評論,你有三個選擇:

  1. 使用連接的環境進行提供程序測試,但之后您必須手動進行一些清理,並確保您的數據始終在您的數據庫中可用或/並且外部 API 始終啟動並運行。 編寫簡單,但可能很難維護。

  2. 您模擬 API 調用,但調用真正的數據庫。

  3. 您模擬所有外部依賴項:API 和數據庫調用。

對於 2) 或 3),您必須擁有測試路由並在您的提供者測試裝置中注入提供者狀態中間件。 然后,您可以配置要調用的提供程序狀態以在解決方案 3) 中生成內存數據,或者在解決方案 2) 中添加一些 data-init

你可以在這里找到一個例子: https : //github.com/pact-foundation/pact-net/tree/master/Samples/EventApi/Provider.Api.Web.Tests

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM