測試 EF Core 應用程式
測試對幾乎所有應用程式類型都是重要的考量事項,其可讓您確定應用程式正常運作,並能立即知道其行為日後是否會回歸。 由於測試可能會影響程式碼架構的方式,因此強烈建議您儘早規劃測試,並確保隨著應用程式的發展而涵蓋範圍良好。 本簡介章節讓您快速一覽使用 EF Core 之應用程式的各種測試策略。
涉及資料庫 (或不涉及)
撰寫 EF Core 應用程式的測試時,必須下的一項基本決定就是測試是否會牽涉到生產資料庫系統 (就像您的應用程式一樣),或者測試是否會在替代生產資料庫系統的測試替身上執行。 EF Core 內容中有兩個著名的測試替身範例:SQLite 記憶體內部模式和記憶體內部提供者。
如需不同方法的深入比較和分析,請參閱選擇測試策略。 以下是簡短的逐點摘要,可協助您加速認識不同的選項:
- 開發人員經常避免在自己的生產資料庫系統上進行測試,因為他們認為這很困難或速度緩慢。 但根據我們的經驗,不一定如此,所以建議您嘗試一下這個方法:在生產資料庫系統上進行測試會提供相關技術讓您穩定且有效率地執行這項作業。 無論什麼情況,都有必要針對資料庫撰寫一些測試,以確保您的應用程式實際適用於生產資料庫;不涉及資料庫的測試,其可讓您測試的內容有限 (如下所示)。
- 記憶體內部提供者的行為,在很多重要方面與實際的資料庫不一樣。 有些功能完全無法測試 (例如交易、原始 SQL 等等),而其他功能的行為可能與生產資料庫不同 (例如查詢區分大小寫)。 雖然記憶體內部適用於簡單、有限制的查詢案例,但受限程度高,所以不建議使用。
- 模擬
DbSet
查詢複雜又困難,和記憶體內部方法有相同的缺點,也不建議使用。
- 模擬
- SQLite 記憶體內部模式與生產關聯式資料庫的相容性更好,因為 SQLite 本身就是成熟的關聯式資料庫。 不過,SQLite 與您的生產資料庫之間仍有一些重要的差異,而且有些功能完全無法測試 (例如 EF.Functions 的提供者特定方法)。
- 如需能使用生產資料庫系統所有功能之可靠測試替身的測試方法,您可以在應用程式中引入存放庫層。 這可讓您在測試中完全排除 EF Core,完全模擬存放庫;但是,這在某方面可能會顯著改變應用程式的架構,並牽涉到更多實作和維護成本。
進一步閱讀
如需更深入的詳細資訊,請參閱選擇測試策略。 如需實作指導方針和程式碼範例,請參閱使用生產資料庫系統進行測試和不使用生產資料庫系統進行測試。