共用方式為


測試 EF 核心應用程式

測試幾乎是所有應用程式類型都很重要的考量——它能確保應用程式正常運作,並且如果未來行為退步,也能立即告知。 由於測試可能影響程式碼架構設計,強烈建議及早規劃測試,並確保隨著應用程式演進的良好覆蓋。 本入門章節簡要介紹使用 EF Core 應用的各種測試策略。

涉及資料庫(或不涉及)

在為 EF Core 應用程式撰寫測試時,你需要做出一個基本決定:你的測試是否會像應用程式一樣涉及生產型資料庫系統,還是會針對取代生產資料庫系統的 測試雙重執行。 在 EF Core 情境中,兩個顯著的測試替身範例是 SQLite 的記憶體內模式,以及 記憶體內提供者

欲深入了解不同方法的比較與分析,請參閱 「選擇測試策略」。 以下是逐點簡要的摘要,幫助你快速了解各種選項:

  • 開發者經常避免在生產資料庫系統上進行測試,因為他們認為這很困難或很慢。 根據我們的經驗,這並非總是如此,我們建議給這個方法一個機會: 透過與你的生產資料庫系統進行測試 ,提供了可靠且有效率的技術。 無論如何,至少要針對資料庫寫一些測試,以確保你的應用程式能真正對生產資料庫運作——而不涉及資料庫的測試可能會限制你能測試的內容(見下文)。
  • 記憶體內部提供者在許多重要方面不會如真正的資料庫般運作。 有些功能根本無法用它測試(例如交易、原始 SQL......),而其他功能可能與你的生產資料庫不同(例如查詢中的大小寫敏感性)。 雖然記憶體內運算在簡單且受限的查詢情境下可行,但其限制非常多,我們不建議使用。
    • 查詢 DbSet 的模擬既複雜又困難,且與記憶體內方法有相同的缺點;我們不建議這樣做。
  • SQLite 記憶體模式 與生產關係型資料庫的相容性更高,因為 SQLite 本身就是一個完整的關聯式資料庫。 然而,SQLite 與您的生產資料庫之間仍會存在一些重要差異,且有些功能完全無法測試(例如 EF.Functions 上的提供者特定方法)。
  • 為了能在應用程式中引入一個能夠模擬生產資料庫系統所有功能的可靠測試替身,可以加入儲存庫層。 這讓你可以在測試中完全排除 EF Core,並完全模擬儲存庫;然而,這會以可能顯著的方式改變你的應用程式的架構,並會引入更多的實作與維護成本。

進一步閱讀

欲了解更多詳情,請參見 「選擇測試策略」。 關於實作指引與程式碼範例,請參閱 「針對你的生產資料庫系統進行測試 」及 「無生產資料庫系統測試」。