我想了解涉及數據庫時的單元測試。我的課很大程度上依賴於數據庫來完成他們的工作。我已經在這裏看到了很多在stackoverflow和互聯網上的很多答案,但是我對我發現的東西並不滿意。使用Symfony 2和數據庫進行單元測試
當我涉及到一個數據庫時(參見MySQL),我看到的一個常見問題是測試真的很長,一個可能的解決方案是使用SQLite。
我不能在測試中的任何地方使用它,因爲有些類使用原始查詢而不是原則querybuilder來繞過未知日期時間函數的限制。 SQLite有一組不同的日期值函數,這意味着要在測試中使用它,我應該重寫我的查詢兩次,一次用於MySQL,一次用於SQLite。
然後我決定堅持使用MySQL,但每次測試運行時都會創建和刪除模式需要很長時間。我知道SchemaTool類可以處理模式子集的創建:只需創建測試套件中真正需要的表,是否應該使用完整模式?
的代碼部分的示例(僞代碼)我試圖測試
NotificationManagerClass
constructor(EntityManager)
loadNotifications()
deleteNotification()
updateNotification()
,你可以看到,我在類的構造函數注入實體管理器。該類是在Symfony容器中註冊的服務。在控制器中,我得到這個服務並使用它的方法。在我使用querybuilder的方法中,因爲我必須有權訪問其他一些服務,並且存儲庫不能識別容器。我怎樣才能脫離我的課程?我想不出一種辦法
我感謝您的回覆。我用我想要測試的例子編輯我的答案,如果你能給我一個例子說明你如何測試與數據庫連接的東西,那將是很酷的 – Stefano
Mock Doctrine? o_O不要爲存儲庫編寫單元測試;改爲編寫整合測試。 –
@ElnurAbdurrakhimov不是教義,而是你的存儲庫。也許我把它寫在文本錯誤:) –