2010-11-03 45 views
20

我試圖讓PHPUnit在我的開發環境中工作,但當涉及到在腳本中包含PHPUnit時,我遇到了一些障礙。我知道我需要在PHP上設置包含路徑,但是如果沒有編譯器看到PHPUnit_Framework_TestCase類,我嘗試過的每個組合都會失敗。獲取PHPUnit工作 - 包括路徑設置不正確?

我剛剛在PHP和PEAR上運行更新,PHPUnit安裝在計算機上,因爲我可以通過命令行訪問它。

PHPUnit的安裝在在/ usr /共享/ PHP/PHPUnit的

梨是在/ usr /共享/ PHP/PEAR

有我丟失的東西?這是我第一次嘗試使用PHPUnit甚至是PEAR的東西。我在Ubuntu 10.10上。任何幫助,將不勝感激。

編輯 - 在我的PHP ini包含路徑中沒有任何東西。眼下代碼只是

<?php 
class Stacktest extends PHPUnit_Framework_TestCase 
{ 

} 

我不知道什麼包括或什麼在包括路徑設置,因爲它似乎是有關PHPUnit的網頁上的所有信息,信息的這一點點是至關重要缺席。

+0

您可以提供一些關於如何在腳本中使用PHPUnit的更多信息嗎? – 2010-11-03 21:39:46

+1

您究竟想要運行測試用例?你在cli中使用類似'phpunit MyClassTest'的東西嗎? – netcoder 2010-11-03 21:49:14

+1

你是說你不能包含TestCase.php?請通過執行echo查找你的包含路徑get_include_path() – Cobby 2010-11-04 01:09:12

回答

16

如果您正確安裝了phpunit(通過PEAR),那麼不需要包含文件;你只需要改變你使用它來測試php文件的方式(例如你用它來測試文件是否通過瀏覽器類型localhost來測試)。有了phpunit,你可以使用命令行; chapter 5給出了使用命令行的相同示例(我假設它是一個標準)。所以,如果你得到了它正確地安裝,你可以這樣做:

  1. 文件ExampleTest.php,位於本地主機的根(對我來說這是/ var/WWW):

    class ExampleTest extends PHPUnit_Framework_TestCase 
    { 
        public function testOne() 
        { 
         $this->assertTrue(FALSE); 
        } 
    } 
    
  2. 開放一個控制檯(Mac或Linux上的終端,Win上的命令提示符),導航到您的localhost文檔根目錄(您保存ExampleTest的位置。PHP),然後鍵入以下內容:

    phpunit --verbose ExampleTest.php 
    
  3. 你應該看到:

    PHPUnit 3.4.13 by Sebastian Bergmann. 
    
    F 
    
    Time: 1 second, Memory: 6.50Mb 
    
    There was 1 failure: 
    
    1) ExampleTest::testOne 
    Failed asserting that <boolean:false> is true. 
    
    /var/www/ExampleTest.php:6 
    
    FAILURES! 
    Tests: 1, Assertions: 1, Failures: 1. 
    

注:以上所有假設你正確安裝PHPUnit的(如chapter 3陳述),你後重新啓動Apache的那個。

,如果你真的想運行在瀏覽器中測試使用下面的代碼

# error reporting 
ini_set('display_errors',1); 
error_reporting(E_ALL|E_STRICT); 

# include TestRunner 
require_once 'PHPUnit/TextUI/TestRunner.php'; 

# our test class 
class ExampleTest extends PHPUnit_Framework_TestCase 
{ 
    public function testOne() 
    { 
     $this->assertTrue(FALSE); 
    } 
} 

# run the test 
$suite = new PHPUnit_Framework_TestSuite('ExampleTest'); 
PHPUnit_TextUI_TestRunner::run($suite); 

編輯

剛剛發現的Ubuntu 10.10在你的問題。對於Ubuntu的安裝,我建議這樣的:在終端做:

sudo pear uninstall phpunit/PHPUnit 
sudo apt-get install phpunit 
sudo /etc/init.d/apache2 restart 

注意:不要發出的第一行,如果你沒有通過梨安裝PHPUnit。最後一行似乎是需要的(至少在我的情況下)。

sudo /etc/init.d/apache2 reload # Or 
sudo service apache2 restart 
+1

在嘗試在瀏覽器中運行時,它正確加載TestRunner.php,但未能加載父類PHPUnit_Runner_BaseTestRunner的文件。在瀏覽器中運行此錯誤時出現以下錯誤:致命錯誤:未在/usr/share/php/PHPUnit/TextUI/TestRunner.php上找到類'PHPUnit_Runner_BaseTestRunner',第60行 – 2011-01-06 13:44:21

+0

首先,您是如何安裝phpunit的?如果梨然後刪除它並通過apt安裝它 - 讓你不再有任何包含文件的問題! – 2011-01-06 13:47:00

+0

秒如果你得到這個錯誤,你可以要求這個文件require_once'PHPUnit/Runner/BaseTestRunner.php';在TestRunner.php是必需的,但我有一個強大的虛假smth當你安裝的錯誤,所以這可能不是你看到的最後一個錯誤,這就是爲什麼我建議使用apt-get,因爲你會舒服的工作。 – 2011-01-06 13:47:53

2

請確保每次使用include()或require()時,都要以dirname(__FILE__)爲實際文件名加前綴。這可以確保您包含的文件位於您指定的相對於包含文件的實際文件的路徑中。通過deftault,PHP包含與啓動程序時調用的文件相關的文件。

6

此行添加到您的php.ini

include_path=".:/usr/share/php:/usr/share/pear:/usr/share/php/PHPunit:/usr/share/php/PEAR" 

保存文件並重新啓動Apache。

此外,請確保您編輯正確的php.ini。嘗試使用locate php.ini來查找它可能隱藏的所有地方。它通常在某個地方的/usr目錄下。

+1

沒有必要找到正確的文件。使用「php -i」來獲得完整的配置。它包含當前加載的配置文件路徑。或者在php文件中使用phpinfo()。 – 2014-10-19 19:53:36

+0

'php -i | grep php.ini' grep是你的朋友,但是,如果你使用Apache的PHP,你應該從瀏覽器中加入php_info()並尋找「php.ini」。 Ubuntu文件在/ etc/apache2 /目錄下,'/ etc/php5/{apache2 | cli | cgi}'下面有更多的文件。 – erm3nda 2015-06-02 13:36:50

26

截至PHPUnit的3.5,你必須包括自動裝載機自己:

require 'PHPUnit/Autoload.php'; // PEAR should be in your include_path 
+0

這是正確的解決方案 - 必須明確包含自動加載器。仍然必須確保你包含路徑設置爲梨以及phpunit。 – 2011-01-10 13:47:48

+6

哪裏?在每個測試文件的頂部? – 2011-11-13 15:54:17

+0

@BSeven,我不確定如何幫助你,但這個答案足以幫助我解決問題。我使用的是PhpStorm 6,並且我可以進入Preferences(Project)> PHP> PHPUnit,並將PHPUnit庫設置爲'use custom loader',然後將路徑設置爲我的項目的vendor/autoload.php '文件。 – 2013-03-15 00:36:13

0

我能夠得到它通過使用通過set_include_path在我的腳本的頂部(見例如這裏http://www.siteconsortium.com/h/p1.php?id=php002)工作,然後我還必須包括,因爲我正在運行硒測試,但它的工作。

require_once ('PHPUnit/Autoload.php'); 
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';