2010-09-19 156 views
1

我們在我們的應用程序中使用APC用戶緩存,但是我們已經開始注意到與APC測試專門相關的單元測試中的各種問題。PHP APC在單元測試中失敗

看來最終APC開始無法存儲和檢索結果;而大多數測試繼續正常運行(因爲它們只是重建數據,如果它沒有從緩存中恢復的話),專門測試緩存的測試在應該失敗時被清空或重新填充,這有點令人討厭。如果它們單獨運行,而不是作爲整個測試套件的一部分運行,那麼相同的測試運行良好)。

問題

  • 任何人都有類似的問題?除了slam_defence設置打破單元測試(這似乎不是我的問題,因爲它沒有顯示任何錯誤消息),我似乎無法通過谷歌找到很多。
  • 有誰知道如何從APC獲得更多的調試信息?我通過檢查apc_store()的返回代碼並將額外的成功參數傳遞給apc_fetch()來檢測失敗,但是我得到的所有結果都是布爾成功/失敗狀態;沒有關於我可以跟進的細節。

回答

2

我的猜測是緩存可能已滿。在你的應用程序中,這是你應該能夠處理的事情(永遠不要假定這些項目存在於緩存中)。我不知道APC如何緩存或過期,所以奇怪的是'後來的東西'不被保留。

在你的unittests的情況下,每個測試工作都會調用apc_clear_cache('user')嗎?

+0

這是一個很好的想法,但爲了確保每個測試的狀態都相同,我們已經在setUp調用中爲每個測試調用了apc_clear_cache('user')。 – 2010-09-19 02:59:44

+0

如果這是真的,那麼我會看看是否可以得到一個持續觸發問題並報告錯誤的簡短腳本。 – Evert 2010-09-19 20:01:50

+0

其實,事實證明你或多或少是正確的。問題發生是因爲緩存已滿,儘管我們嘗試將其清空。調用apc_clear_cache無法釋放內存;即使對每個項目調用apc_delete也無法釋放內存。有關於此的任何想法? – 2010-10-18 21:13:28