我一直在做單元測試,遇到了這個奇怪的壞問題。Zend Session Handler Db表在PHPUnit測試期間被破壞
我正在用我的一些服務/映射器進行用戶認證測試。
我跑了,所有307個測試現在一起。這隻有當我在一批中運行它們時才真正發生。
我嘗試僅實例化一個Zend_Application對象,並將其用於我的所有測試。我只是實例化它來照顧數據庫連接,會話和我的類的自動加載。
這是問題所在。
沿測試線的某處,調用Zend_Session_SaveHandler_DbTable的__destruct方法。我不知道爲什麼?但它確實如此。
__destruct方法將呈現任何寫入我的會話對象無用,因爲它們被標記爲只讀。
我不知道爲什麼要調用destruct方法。
它在我的認證測試之前被調用了很多測試。如果我單獨運行每個測試文件夾,則沒有問題。只有當我嘗試運行所有307個測試時。我確實有一些做數據庫工作的測試,但是我的代碼沒有關閉數據庫連接或破壞保存處理程序。
有沒有人有任何想法,爲什麼會發生這種情況,爲什麼我的Zend_Session_SaveHandler_DbTable被破壞?這與默認的一生有什麼關係?
我認爲理論上你會想要一個新的應用程序對象爲每個測試。但實際上,當我們確信每個後續測試都是原始的時候,使用相同的對象往往是一種方式。他們都在同一個測試套件中嗎?在不同的套件中進行測試有助於解決這類問題。如果你發現兩次_destruct被調用兩次,你可能會發現什麼阻礙了你的測試。祝好運,+回覆您的發現。 – stefgosselin 2011-06-08 03:10:31
嘿,我有我的引導文件創建一個全局zend_application對象,並將其放入$ GLOBALS變量。然後,每個測試類將在它的setUpBeforeClass/SetUp方法中獲取應用程序對象。 我沒有調度任何控制器或任何東西。我實例化它的原因是因爲可以調用應用程序來設置我的模型的自動加載和數據庫/認證測試的數據庫連接。 – 2011-06-08 12:28:29
我所有的測試都在其他文件夾的「應用程序」文件夾中。在PHP單元中,如果我指定了子文件夾,那麼一切都很好。但是,一旦我試圖運行每一個測試,事情就變得糟糕。 我認爲我錯過了某種可以解釋所有這些的PHPUnit行爲。 – 2011-06-08 12:30:33