我正在測試使用SqlAlchemy(v0.7.4)的消息處理器。在我的測試中,我使用Fixture (v1.4)和Sqlite來設置和拆除一個臨時數據庫。我的夾具數據包括一個文件表,其中包含狀態字段,應在處理器運行時更新。當我在單元測試中使用SqlAlchemy的Fixture時,爲什麼我無法在測試期間確認數據庫的更改?
我已確認測試,正在測試的處理器和燈具都共享相同的數據庫會話。
我在處理器運行之前和之後查詢文件記錄上的狀態字段。值應該改變(從表示「Processing」的int到「Complete」)。我在處理器中添加了調試代碼,以驗證該字段是否正在使用正確的新狀態值進行更新。我還能夠通過檢查它生成的輸出文件的內容來獨立驗證處理器是否成功運行。但是,當我使用測試的數據庫會話查詢測試結束時的狀態時,它始終與開始時的值相同。
我已經試過在最終狀態查詢之前顯式提交和刷新會話。什麼都沒有有任何想法嗎?
我發現了這個問題。正在測試的腳本正在分叉發生數據庫更新的新子進程。 Sqlite數據庫正在內存中設置,因此測試數據庫會話和處理器的會話位於不同的內存空間中。解決方法是設置臨時Sqlite數據庫的文件而不是內存。 – klenwell 2012-04-03 22:54:44
同上。如果內存存儲是可能的話會更好。測試應該以這種方式快速運行。 – jpanganiban 2012-08-20 15:05:26