2011-09-01 121 views
4

我有一個symfony2應用程序,我正在使用phpunit。phpunit重置測試之間的環境

我有一些單元測試,我使用mock來模擬AppKernel和功能測試,它們會嚮應用程序發出「真實」請求。單獨運行單元測試或功能測試時,一切正常。

當我想要一次運行所有測試時,它變得很討厭。一旦單元測試完成後,PHPUnit的停止,告訴我:

Fatal error: Cannot redeclare class AppKernel in C:\Users\sebastian\workspace\ppInterface\app\AppKernel.php on line 35

我不明白這一點,因爲我認爲PHPUnit的將運行在它自己的環境,每個測試。這似乎並非如此。我能做些什麼來使事情正確並「重置」測試運行的環境?

回答

8

雖然PHPUnit有可能,但默認情況下不會重置所有內容。

包括 - 在您的情況下的問題 - 不重置(並且不能在一個單一的進程中)。解決方法是使用require_once而不是require,或在phpunit.xml文件或測試用例(@runTestsInSeparateProcesses)或測試方法(@runInSeparateProcess)中使用進程隔離。

您也可以影響是什麼測試之間重置了:

  • @backupGlobals
  • @backupStaticAttributes
+0

'@ runTestsInSeparateProcesses'的偉大工程!我將它添加到測試中,現在它們都運行沒有問題。然而,我想將它添加到我的phpunit.xml中,但找不到要添加它的文檔。我想將它添加到我的xml中的中定義的組中。那可能嗎? – Sgoettschkes

+1

請記住,隨着應用程序的增長,在單獨的進程中運行測試將開始顯着減慢。您可能需要考慮以兩組方式運行測試:使用嘲諷的測試和不篡改的測試。 –

+1

當然,你可以在你的'phpunit.xml'中配置它:只需在''處添加'processIsolation =「true」'。 – mAu