2011-08-12 19 views
7

Tôi có điều này trong tập tin phpunit.xml tôi:tại sao PHPUnit cố gắng tìm một tệp có tên của testsuite?

<phpunit ...> 
    <testsuites> 
     <testsuite name="MyTests"> 
      <directory>../path/to/some/tests</directory> 
     </testsuite> 
    </testsuites> 
    ... // more settings for <filter> and <logging> 
</phpunit> 

Và khi tôi đi để chạy nó, tôi nhận được lỗi này:

PHP fatal error: Uncaught exception 'PHPUnit_Framework_Exception' 
with message 'Neither "MyTests.php" nor "MyTests.php" could be opened.' 

Tại sao PHPUnit cho tôi lỗi này, và tại sao nó tìm kiếm "MyTests.php" nếu tôi đưa cho nó một thư mục để tìm kiếm các bài kiểm tra?

Và trên ghi chú có liên quan, khi tôi thêm nhiều mục nhập hơn <testsuite> với các kiểm tra khác, PHPUnit sẽ chạy mà không có lỗi. Có chuyện gì thế?

Trả lời

5

Theo mặc định PHPUnit sẽ thêm "tất cả *Test lớp được tìm thấy trong *Test.php file" (xem PHPUnit docs). Nếu không tìm thấy bất kỳ tệp nào khớp với mô tả đó, (ví dụ: tệp SomeTest.php xác định lớp SomeTest), nó sẽ quay trở lại tìm kiếm tệp dựa trên thuộc tính tên của bộ thử nghiệm.

Giải pháp là để tạo ra một tập tin phù hợp với mô tả đó để PHPUnit không rơi trở lại để mặc định của tìm kiếm theo tên TestSuite:

<?php 
// in ../path/to/some/tests/SomeTest.php: 
class SomeTest extends PHPUnit_Framework_TestCase { 
    public function test() { 
     //... test cases here 
    } 
} 
?> 

Bây giờ bạn sẽ có thể chạy phpunit không có lỗi:

$ phpunit 
PHPUnit 3.5.14 by Sebastian Bergmann. 

. 

Time: 0 seconds, Memory: 10.75Mb 

OK (1 test, 0 assertions) 

Nó sẽ làm việc mà không có lỗi khi bạn thêm testsuite mục nếu PHPUnit có thể tìm thấy phù hợp với trường hợp thử nghiệm để chạy theo những dãy phòng khác. Nếu nó tìm thấy các thử nghiệm để chạy trong bất kỳ testuite nào, nó sẽ không dùng đến việc tìm kiếm theo thuộc tính name cho các dãy phòng mà nó không thể tìm thấy bất cứ thứ gì.

1

Tôi tin rằng sự cố là bạn không cho biết tệp nào chứa các trường hợp kiểm tra và/hoặc bộ bạn muốn chạy. Hãy thử thêm thuộc tính suffix="Test.php".

<testsuite name="MyTests"> 
    <directory suffix="Test.php">../path/to/some/tests</directory> 
</testsuite> 
+0

Dường như hậu tố mặc định là "Test.php"; đó là khi không có tệp nào khớp với hậu tố mà nó bắt đầu tìm kiếm một tệp có tên được đặt trong thuộc tính 'name'. Hấp dẫn. – chesles

+1

LOL, tôi cho rằng bạn thực sự đã có một số thử nghiệm để chạy và tìm kiếm những gì có thể khác so với tệp của tôi. :) Tốt để biết tôi có thể bỏ qua hậu tố từ bây giờ. –

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