2010-09-08 23 views
53

làm cách nào tôi có thể chọn một thử nghiệm cụ thể để được thực thi?Làm thế nào để chạy một phpunit xml testsuite cụ thể?

$ phpunit --configuration config.xml

config.xml:

<testsuites> 
    <testsuite name="Library"> 
     <directory>library</directory> 
    </testsuite> 
    <testsuite name="XXX_Form"> 
     <file>library/XXX/FormTest.php</file> 
     <directory>library/XXX/Form</directory> 
    </testsuite> 
</testsuites> 
+0

X-Ref: [Chạy một testsuite duy nhất theo mặc định trong PHPUnit] (https://stackoverflow.com/q/37820193/367456) – hakre

Trả lời

76

Dưới đây là các mã như nếu PHPUnit 3.7.13

$ phpunit --configuration config.xml --testsuite Library 
$ phpunit --configuration config.xml --testsuite XXX_Form 

Nếu bạn muốn chạy một nhóm các dãy phòng thử nghiệm sau đó bạn có thể làm điều này

<testsuites> 
    <testsuite name="Library"> 
    <directory>library</directory> 
    </testsuite> 
    <testsuite name="XXX_Form"> 
    <file>library/XXX/FormTest.php</file> 
    <directory>library/XXX/Form</directory> 
    </testsuite> 
    <testsuite name="Both"> 
    <directory>library</directory> 
    <file>library/XXX/FormTest.php</file> 
    <directory>library/XXX/Form</directory> 
    </testsuite> 
</testsuites> 

Sau đó

$ phpunit --configuration config.xml --testsuite Both 

Thật không may, PHPUnit hiện không hỗ trợ các thử nghiệm lồng nhau như thế này

<testsuites> 
    <testsuite name="Both"> 
     <testsuite name="Library"> 
     <directory>library</directory> 
     </testsuite> 
     <testsuite name="XXX_Form"> 
     <file>library/XXX/FormTest.php</file> 
     <directory>library/XXX/Form</directory> 
     </testsuite> 
    </testsuite> 
</testsuites> 

Vì vậy, nếu bạn muốn chạy các nhóm bộ thử nghiệm theo cách này, bạn phải có bản sao cấu hình xml!

+0

Tôi gặp sự cố đơn giản là bị bỏ qua. Không có thử nghiệm nào được thực thi. Nếu tôi chỉ định với chúng chạy tốt, nhưng tôi không thể chỉ định tất cả chúng theo cách thủ công! Họ làm theo các tập tin Test.php và quy ước tên lớp. Ý kiến? –

+0

bạn có thể chia sẻ tệp cấu hình của mình không? Thông tin chi tiết nhỏ thường là nghi phạm. –

+0

http://stackoverflow.com/questions/15249469/phpunit-does-not-find-any-tests-with-director-xml-tag-but-does-with-some-file –

17

này là không thể trong các phiên bản hiện tại của PHPUnit bằng chứng là những tin nhắn trong phpunit-mail người sử dụng danh sách: http://thread.gmane.org/gmane.comp.php.phpunit.user/1302

Nhưng có một giải pháp thay thế, bạn có thể chỉ cần chuyển đường dẫn đến phpunit.

phpunit library/XXX 

này sẽ chạy tất cả các bài kiểm tra trong thư viện/XXX thư mục

Nếu đây là không đủ cho bạn, một lựa chọn khác là sử dụng @group annotation chia thử nghiệm thành các loại khác nhau mà sau đó có thể được chạy một cách chọn lọc.

+0

tốt, như bạn có thể thấy trong bài đăng của tôi, đây không phải là chính xác những gì tôi cần –

+0

Sau đó, không có gì bạn có thể làm, như đã chỉ ra trong liên kết đầu tiên của câu trả lời của tôi. –

2

Một tùy chọn khác là tạo tệp cấu hình riêng cho từng testuite mà bạn muốn kiểm tra riêng. Có một số chi phí trong đó bạn có thể phải sao chép/dán các thiết lập trùng lặp, nhưng sau đó bạn có thể chỉ định mỗi tập tin cấu hình khi cần thiết.

1

Các câu trả lời khác ở đây là chính xác. Bạn không thể làm điều này bằng cách sử dụng một cấu hình xml, những gì bạn có thể làm mặc dù là làm cho cùng một loại cấu hình trong php.

Chắc chắn đây không phải là điều đẹp nhất, nhưng nó sẽ cung cấp cho bạn chức năng bạn cần.

Bạn cung cấp cấu hình xml

<testsuites> 
    <testsuite name="Library"> 
    <directory>library</directory> 
    </testsuite> 
    <testsuite name="XXX_Form"> 
    <file>library/XXX/FormTest.php</file> 
    <directory>library/XXX/Form</directory> 
    </testsuite> 
</testsuites> 

giả thuyết, giả sử thư mục của bạn "thư viện" chứa 3 file:

library 
    XXX  
    FormTest.php 
    Unit 
    unittest1.php 
    unittest2.php 

Và rằng mỗi người trong các tập tin chứa 1 bài kiểm tra theo quy ước đặt tên hoàn hảo, ví dụ: FormTest chứa testForm()

Đối với cấu hình, chúng tôi sẽ tạo cấu hình chứa mọi thứ:

<?php 
include_once "library/XXX/FormTest.php"; 
include_once "library/Unit/unittest1.php"; 
include_once "library/Unit/unittest2.php"; 

Sau đó, chúng tôi sẽ tạo một lớp theo quy ước đặt tên phpunit. Bạn có thể đặt tên cho nó bất cứ điều gì bạn muốn vì chúng tôi sẽ không bao giờ thực sự sử dụng nó ...

class LibraryConfigTest extends PHPUnit_Framework_TestCase { 

Mỗi "bộ thử nghiệm" sẽ đơn giản là phương pháp chạy thử nghiệm bạn muốn. Đặt tên cho các phương thức bất cứ điều gì bạn muốn, một lần nữa, chúng tôi sẽ không bao giờ thực sự sử dụng nó. Phpunit sẽ chăm sóc chạy. Hãy chắc chắn để bình luận chúng thành các nhóm mặc dù vậy bạn biết cách thực hiện.

/** 
* All Tests in Library 
* @group Library 
**/ 
    public function testLibrary() { 
     UnitTest1::testUnit1(); 
     UnitTest2::testUnit2(); 
     FormTest::testForm(); 
    } 

/** 
* All Form tests in library/XXX 
* @group XXX_Form 
**/ 
    public function testForm() { 
     FormTest::testForm(); 
    } 
} 
?> 

Bây giờ để có được chức năng bạn muốn chỉ chạy "cấu hình" đối với nhóm bạn muốn.

phpunit --group XXX_Form library_config.php 
phpunit --group Library library_config.php 

Như tôi đã nói, đây là xấu xí và chắc chắn không tốt mã như nó sẽ yêu cầu bảo trì thường xuyên, nhưng nó sẽ cung cấp cho bạn các chức năng bạn đang tìm kiếm.

Hy vọng Bergmann sẽ thêm chức năng này vào vòng tiếp theo của mình mặc dù dường như không có vẻ như anh ta dường như là ignoring it.

2

Kể từ phpunit 6.1 bạn có thể sử dụng trong tệp cấu hình xml thuộc tính defaultTestSuite, điều này giống như sử dụng tùy chọn mặc định phpunit --testsuite xxx và được ghi đè lên.

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