2010-05-18 76 views
4

我正在測試我的站點的身份驗證功能。 Zend_Auth正在使用授權引擎。但驗證狀態仍然存在於測試之間,我需要在每一次tearDown中寫出「註銷」。在PHPUnit測試中隔離Zend_Session

現在一切都好。但問題在於。至於我知道Zend_Auth使用Zend_Session存儲auth數據。所以,會話在所有測試中都很常見。我擔心將來會導致問題。

你能告訴我什麼是最好的做法,使每個測試會話隔離?

現在我可以想象只有在setUp中手動啓動會話並在tearDown中停止。但是我有很多測試並且實現這可能需要很長時間。

回答

1

對於整個測試套件,PHPUnit允許您爲define a shared fixture(常見設置)。然而,這個解決方案掩蓋了測試設計中的一個缺陷,因爲它沒有解決他們對一個通用全局狀態的依賴。更好的解決方案是use test doubles,創建某些類的自定義存根控制系統選定部分的行爲。

在這種情況下,您可以嘗試創建一個Zend_Auth的存根,以便它跳過Zend_Session的使用並返回每個單元測試所需的權限。

+0

但是在這兩種情況下,我仍然需要對所有存在的測試進行更改。我正在尋找一些不這樣做的方法。如果可能。 – darja 2010-05-19 02:55:59

+0

問題是:你能告訴我什麼是最好的做法,使每個測試會話隔離?那麼,這些是一些選擇。另一方面,實現一個共享夾具並不需要做太多的改變,你只需要爲所有那些需要會話認證的測試創建一個測試套件,然後把測試中的夾具移動到套件中的一個普通夾具上。 還有另外一個選項,它只是爲了測試目的而創建一個Zend_Auth的模擬。那麼這只是尋找和替換的問題。 – nuqqsa 2010-05-19 08:25:18

+0

您好,我想起了另一種可能適合您的方法(僞造用戶身份),請參閱:http://stackoverflow.com/questions/2937387/is-there-any-way-to-force-authentication-與-的Zend-AUTH/2939327#2939327 – nuqqsa 2010-05-31 12:07:16