2010-11-03 23 views
20

Tôi đang cố gắng để có được PHPUnit làm việc trên môi trường phát triển của tôi nhưng tôi đã đánh một chút của một rào cản khi nói đến bao gồm PHPUnit trong kịch bản của tôi. Tôi biết rằng tôi cần phải thiết lập đường dẫn bao gồm trên PHP nhưng mọi kết hợp tôi đã cố gắng không thành công mà không có trình biên dịch nhìn thấy lớp PHPUnit_Framework_TestCase.Bắt PHPUnit Working - Bao gồm Path không được thiết lập chính xác?

Tôi vừa chạy cập nhật trên PHP và PEAR và PHPUnit được cài đặt trên máy tính vì tôi có thể truy cập thông qua dòng lệnh tốt.

PHPUnit được lắp đặt tại /usr/share/php/PHPUnit

Pear là /usr/share/php/PEAR

Có cái gì tôi đang thiếu? Đây là lần đầu tiên tôi cố gắng sử dụng PHPUnit hoặc thậm chí một cái gì đó từ PEAR cho vấn đề đó. Tôi đang ở trên Ubuntu 10.10. Bất kỳ trợ giúp sẽ được đánh giá cao.

Chỉnh sửa - Không có gì trong đường dẫn bao gồm trong ini PHP của tôi. Ngay bây giờ các mã chỉ là

<?php 
class Stacktest extends PHPUnit_Framework_TestCase 
{ 

} 

Tôi không có ý tưởng gì để bao gồm hoặc những gì để thiết lập trong đường dẫn bao gồm bởi vì nó dường như cho tất cả các thông tin trên web về PHPUnit, bit này ít thông tin là cực kỳ quan vắng mặt .

+0

Bạn có thể cung cấp thêm thông tin về cách bạn đang cố gắng sử dụng PHPUnit trong tập lệnh của mình không? –

+1

Làm thế nào chính xác là bạn đang cố gắng để chạy testcases của bạn? Bạn đang sử dụng một cái gì đó như 'phpunit MyClassTest' trong cli? – netcoder

+1

Bạn đang nói bạn không thể bao gồm TestCase.php? Vui lòng tìm hiểu đường dẫn bao gồm của bạn bằng cách thực hiện echo get_include_path() – Cobby

Trả lời

16

Nếu bạn đã cài đặt đúng phpunit (thông qua PEAR), thì không cần tệp bao gồm; bạn chỉ cần thay đổi cách bạn sử dụng nó để kiểm tra các tệp php (ví dụ: bạn sử dụng nó để kiểm tra xem tệp có hoạt động hay không bằng cách vào trình duyệt loại localhost). Với phpunit bạn có thể sử dụng dòng lệnh; chapter 5 cho ví dụ tương tự bằng cách sử dụng dòng lệnh (Tôi cho rằng đó là một tiêu chuẩn). Vì vậy, nếu bạn đã nhận nó được cài đặt đúng, bạn có thể làm điều này:

  1. file ExampleTest.php, nằm ở thư mục gốc của localhost (đối với tôi đây là/var/www):

    class ExampleTest extends PHPUnit_Framework_TestCase 
    { 
        public function testOne() 
        { 
         $this->assertTrue(FALSE); 
        } 
    } 
    
  2. Mở một giao diện điều khiển (thiết bị đầu cuối trên Mac hoặc Linux, dấu nhắc lệnh trên Win), điều hướng đến gốc tài liệu cục bộ của bạn (nơi bạn đã lưu ExampleTest.php) và gõ như sau:

    phpunit --verbose ExampleTest.php 
    
  3. Bạn sẽ thấy:

    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. 
    

Ghi chú: Tất cả các giả định ở trên, bạn cài đặt phpunit một cách chính xác (như đã nêu trong chapter 3) và bạn khởi động lại apache sau cái đó .

nếu bạn thực sự muốn chạy thử nghiệm trong trình duyệt của bạn sử dụng đoạn mã sau

# 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); 

Sửa

Chỉ cần phát hiện Ubuntu 10.10 trong câu hỏi của bạn. Đối với cài đặt Ubuntu, tôi khuyên bạn nên sử dụng: trong thiết bị đầu cuối làm:

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

Lưu ý: Không phát hành dòng đầu tiên nếu bạn không cài đặt phpunit qua quả lê. Dòng cuối cùng có vẻ là cần thiết (trong trường hợp của tôi ít nhất).

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

Khi cố gắng chạy trong trình duyệt nó tải đúng TestRunner.php nhưng không tải được tệp của lớp cha mẹ PHPUnit_Runner_BaseTestRunner. Tôi nhận được lỗi sau khi chạy này trong trình duyệt: Lỗi nghiêm trọng: Class 'PHPUnit_Runner_BaseTestRunner' không tìm thấy trong /usr/share/php/PHPUnit/TextUI/TestRunner.php trên dòng 60 –

+0

đầu tiên, làm thế nào bạn đã cài đặt phpunit? nếu lê sau đó loại bỏ nó và cài đặt nó thông qua apt-get bạn whont có bất kỳ vấn đề với bao gồm các tập tin nữa! –

+0

giây nếu bạn gặp lỗi đó, bạn có thể yêu cầu tệp đó quá require_once 'PHPUnit/Runner/BaseTestRunner.php'; trước khi TestRunner.php là bắt buộc, nhưng tôi có một cái gì đó rất khó chịu khi bạn cài đặt vì vậy đây có thể không phải là lỗi cuối cùng bạn thấy, đó là lý do tại sao tôi khuyên bạn nên sử dụng apt-get như bạn sẽ làm việc. –

2

Đảm bảo mỗi lần sử dụng bao gồm() hoặc require(), bạn đặt trước tên tệp thực tế với dirname(__FILE__). Điều này đảm bảo rằng tệp bạn đang đưa vào nằm ở đường dẫn mà bạn chỉ định liên quan đến tệp thực sự bao gồm tệp. Theo mặc định, PHP bao gồm liên quan đến tệp được gọi để bắt đầu chương trình.

6

Thêm dòng này để php.ini của bạn:

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

Lưu file và khởi động lại apache.

Ngoài ra, hãy đảm bảo bạn chỉnh sửa đúng php.ini. Hãy thử sử dụng locate php.ini để tìm tất cả các địa điểm có thể đang ẩn. Nó thường nằm trong thư mục /usr ở đâu đó.

+1

Không cần phải 'định vị' tệp chính xác. Sử dụng "php -i" để có được cấu hình đầy đủ. Nó chứa đường dẫn tệp cấu hình hiện đang được tải. Hoặc sử dụng phpinfo() trong một tập tin php. –

+0

'php -i | grep php.ini' grep là bạn của bạn, nhưng, nếu bạn sử dụng php từ Apache bạn nên kiểm tra từ một trình duyệt thêm php_info() và tìm kiếm "php.ini". Các tệp Ubuntu nằm trong/etc/apache2/và có nhiều tệp hơn trong thư mục '/ etc/php5/{apache2 | cli | cgi}'. – erm3nda

26

Tính đến PHPUnit 3.5, bạn phải bao gồm các autoloader mình:

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

Đây là giải pháp đúng - bộ nạp tự động phải được bao gồm một cách rõ ràng. Vẫn phải chắc chắn rằng bạn đã bao gồm đường dẫn thiết lập để lê cũng như phpunit. –

+6

Ở đâu? Ở đầu mỗi tệp thử nghiệm? –

+0

@BSeven, tôi không chắc chắn chính xác làm thế nào để giúp bạn, nhưng câu trả lời này là đủ hữu ích để có được tôi đi trong tình hình của tôi. Tôi đang sử dụng PhpStorm 6 và tôi đã có thể đi vào Preferences (Project)> PHP> PHPUnit và đặt thư viện PHPUnit thành 'sử dụng trình tải tùy chỉnh' và sau đó tôi đặt đường dẫn thành 'vendor/autoload.php của dự án của tôi 'tệp. –

0

tôi đã có thể để có được nó làm việc bằng cách sử dụng set_include_path ở phía trên cùng của kịch bản của tôi (xem ví dụ ở đây http://www.siteconsortium.com/h/p1.php?id=php002), và sau đó tôi cũng phải bao gồm kể từ khi tôi đang chạy một bài kiểm tra Selenium, nhưng nó đã làm việc.

require_once ('PHPUnit/Autoload.php'); 
require_once 'PHPUnit/Extensions/SeleniumTestCase.php'; 
Các vấn đề liên quan