2010-10-28 21 views
26

Từ những gì tôi đã đọc, có vẻ như tôi sẽ có thể thiết lập một thư mục, ví dụ: kiểm tra /, đặt một vài tập tin trong đó với các lớp kiểm tra đơn vị, và sau đó chạy phpunit trên tập tin đó và có nó tìm và chạy các bài kiểm tra.Làm cách nào để tôi có thể chạy phpunit để chạy thử nghiệm từ tất cả các tệp trong một thư mục?

Đối với bất cứ lý do, trong cài đặt của tôi (trên OS X), nó nghĩ rằng các bài kiểm tra thư mục/là một file, hoặc lâu hơn nó sẽ có vẻ:

$ ls tests 
test1.php test2.php 
$ phpunit tests/test1.php 
PHPUnit 3.5.3 by Sebastian Bergmann. 

F 

Time: 0 seconds, Memory: 5.00Mb 

There was 1 failure: 

1) FailingTest::testFail 
Your test successfully failed! 

/Users/****/tmp/tests/test1.php:4 

FAILURES! 
Tests: 1, Assertions: 0, Failures: 1. 
$ phpunit tests/test2.php 
PHPUnit 3.5.3 by Sebastian Bergmann. 

. 

Time: 0 seconds, Memory: 5.00Mb 

OK (1 test, 1 assertion) 
$ phpunit tests 
PHP Fatal error: Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither "tests.php" nor "tests.php" could be opened.' in /usr/local/PEAR/PHPUnit/Util/Skeleton/Test.php:102 
Stack trace: 
#0 /usr/local/PEAR/PHPUnit/TextUI/Command.php(157): PHPUnit_Util_Skeleton_Test->__construct('tests', '') 
#1 /usr/local/PEAR/PHPUnit/TextUI/Command.php(129): PHPUnit_TextUI_Command->run(Array, true) 
#2 /usr/local/bin/phpunit(53): PHPUnit_TextUI_Command::main() 
#3 {main} 
    thrown in /usr/local/PEAR/PHPUnit/Util/Skeleton/Test.php on line 102 

Fatal error: Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither "tests.php" nor "tests.php" could be opened.' in /usr/local/PEAR/PHPUnit/Util/Skeleton/Test.php:102 
Stack trace: 
#0 /usr/local/PEAR/PHPUnit/TextUI/Command.php(157): PHPUnit_Util_Skeleton_Test->__construct('tests', '') 
#1 /usr/local/PEAR/PHPUnit/TextUI/Command.php(129): PHPUnit_TextUI_Command->run(Array, true) 
#2 /usr/local/bin/phpunit(53): PHPUnit_TextUI_Command::main() 
#3 {main} 
    thrown in /usr/local/PEAR/PHPUnit/Util/Skeleton/Test.php on line 102 

tôi có những gì tôi hy vọng là một cài đặt khá chuẩn của phpunit qua PEAR, thực hiện theo các hướng dẫn sau http://www.newmediacampaigns.com/page/install-pear-phpunit-xdebug-on-macosx-snow-leopard, trên OS X Snow Leopard.

$ pear version 
PEAR Version: 1.9.1 
PHP Version: 5.3.2 
Zend Engine Version: 2.3.0 
Running on: **** 10.4.0 Darwin Kernel Version 10.4.0: Fri Apr 23 18:28:53 PDT 2010; root:xnu-1504.7.4~1/RELEASE_I386 i386 
$ phpunit --version 
PHPUnit 3.5.3 by Sebastian Bergmann. 

Tôi hy vọng một người nào đó đã gặp phải sự cố này và nó chỉ là một sửa chữa đơn giản, nếu không tôi chỉ đang làm điều gì đó sai?

+1

Cảm ơn này nhưng tôi đã tìm ra (xem câu trả lời của tôi). Vì bạn đã liên kết tôi với trình theo dõi vấn đề, tôi sẽ gửi một vé để xem liệu họ có cập nhật tài liệu của họ hay không. – jsdalton

Trả lời

52

Nó không phải là một lỗi, nó là một tính năng.

Bạn có một thư mục chứa đầy đủ các tệp .php, trong trường hợp của bạn, tất cả đều chứa testcases.

Nhưng khi testuite của bạn phát triển, bạn có thể muốn có các tệp php khác bên trong thư mục kiểm tra, tệp không chứa thử nghiệm, chỉ tồn tại để hỗ trợ kiểm tra. Các tệp đó sẽ không bao giờ được thực thi bởi chính PHPUnit.

Đây là một tình huống rất phổ biến.

Vậy làm thế nào PHPUnit biết tệp nào cần chạy và tệp nào không cần? Kiểm tra hậu tố tên tệp là một tùy chọn để thực hiện - theo mặc định PHPUnit xem xét mọi thứ có tên kết thúc bằng Test.php làm thử nghiệm và bỏ qua mọi thứ khác.

Bạn có thể thay đổi hành vi đó nếu bạn thực sự muốn - bằng cách tạo một file có tên phpunit.xml trong thư mục kiểm tra của bạn với nội dung sau

<?xml version="1.0" encoding="utf-8" ?> 
<phpunit> 
<testsuite name='Name your suite'> 
    <directory suffix='.php'>./</directory> 
</testsuite> 
</phpunit> 

Một khi bạn đã làm điều đó, PHPUnit sẽ chạy tất cả các file với '.php' ở cuối tên tệp (trong phần mở rộng tệp ngữ cảnh này được coi là một phần của tên tệp)

Nhưng thực sự tốt hơn là làm quen với quy ước và đặt tên cho thử nghiệm của bạn cho phù hợp.

+5

Đồng ý. Tôi không nghĩ rằng hành vi của phpunit là không chính xác, nó chỉ là yêu cầu này đã không được thực hiện rõ ràng trong tài liệu bất cứ nơi nào, và do đó tôi đã hút xuống một lỗ thỏ cố gắng tìm ra điều này trong khoảng một giờ. Tôi đã nộp một vé mặc dù và người bảo trì đã cam kết một bản vá cho tài liệu làm rõ nó. – jsdalton

+0

Tuyệt vời, cải tiến tài liệu luôn hữu ích :) –

19

Khó chịu chút khó chịu, nhưng tôi đã tìm ra.

Ít nhất với cấu hình mặc định, tệp thử nghiệm phải kết thúc bằng "Test.php", ví dụ: fooTest.php hoặc chúng không được tìm thấy bởi người thử nghiệm.

+5

điều này nên được viết bằng chữ in đậm và màu đỏ trong hướng dẫn sử dụng của PhpUnit – hkarask

+2

Nó không được in đậm mà là điểm đầu tiên của thử nghiệm ví dụ đầu tiên trong tài liệu. "1. Các bài kiểm tra cho một lớp Class đi vào một lớp ClassTest." http://phpunit.de/manual/current/en/phpunit-book.html#writing-tests-for-phpunit –

17

Cách đơn giản để chạy thử nghiệm trên thư mục là thêm "test.php" ở cuối tất cả các bài kiểm tra của bạn và chạy phpunit việc xác định thư mục của bạn như

phpunit . 

hoặc

phpunit your_test_folder/. 
+1

nếu bạn không muốn tên tệp kết thúc bằng 'Test.php' trong thư mục, bạn có thể chạy với' --test-suffix = anything.php' để ghi đè lên nó. – checksum

Các vấn đề liên quan