Làm thế nào để chạy một testsuite phpunit xml cụ thể?


83

làm cách nào để chọn một testsuite cụ thể để thực thi?

$ 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>

Câu trả lời:


125

Đây là mã như thể 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 bộ thử nghiệm thì 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

Rất tiếc PHPUnit hiện không hỗ trợ các testsuite 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!


Tôi gặp sự cố mà <directory> bị bỏ qua. Không có thử nghiệm nào được thực hiện. Nếu tôi chỉ định với <file> thì chúng chạy tốt, nhưng tôi không thể chỉ định tất cả theo cách thủ công! Chúng tuân theo quy ước về tên lớp và tệp Test.php. Ý tưởng?
Alexander Morland

bạn có thể chia sẻ tệp cấu hình của bạn không? Những chi tiết nhỏ thường bị nghi ngờ.
Josh Woodcock


20

Điều này không thể xảy ra trong các phiên bản PHPUnit hiện tại, bằng chứng là các thông báo này trong danh sách gửi thư người dùng phpunit: 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 một đường dẫn đến phpunit.

phpunit library/XXX

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

Nếu điều này không đủ đối với bạn, một tùy chọn khác là sử dụng chú thích @group để chia các bài kiểm tra thành các danh mục khác nhau mà sau đó có thể chạy một cách chọn lọc.


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

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

3

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


1

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


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 cấu hình xml, những gì bạn có thể làm là tạo cùng một loại cấu hình trong php.

Nó chắc chắn không phải là thứ đẹ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>

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

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

Và mỗi tệp 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 một 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 ta sẽ tạo một lớp theo quy ước đặt tên phpunit. Bạn có thể đặt tên nó bất cứ thứ 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ẽ chỉ đơn giản là một phương pháp chạy các thử nghiệm bạn muốn. Đặt tên cho các phương thức là bất cứ thứ 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ẽ lo việc chạy. Hãy chắc chắn nhận xét chúng thành các nhóm để 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ỉ cần chạy "cấu hình" 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à mã xấu và chắc chắn không tốt vì nó sẽ yêu cầu bảo trì liên tục, nhưng nó sẽ cung cấp cho bạn chức năng mà bạn đang tìm kiếm.

Hy vọng rằng Bergmann sẽ bổ sung chức năng này trong vòng tiếp theo của anh ấy mặc dù có vẻ như không có khả năng vì anh ấy dường như đã bỏ qua nó .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.