[xml] 특정 phpunit xml testsuite를 실행하는 방법은 무엇입니까?

실행할 특정 테스트 스위트를 어떻게 선택할 수 있습니까?

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



답변

다음은 PHPUnit 3.7.13과 같은 코드입니다.

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

테스트 스위트 그룹을 실행하려면 다음을 수행 할 수 있습니다.

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

그때

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

불행히도 PHPUnit은 현재 이와 같은 중첩 된 테스트 스위트를 지원하지 않습니다.

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

따라서 이런 방식으로 테스트 스위트 그룹을 실행하려면 xml 구성 복제가 필요합니다!


답변

이것은 phpunit-user 메일 링리스트에있는 다음 메시지에 의해 입증 된 것처럼 현재 버전의 PHPUnit에서는 불가능합니다 : http://thread.gmane.org/gmane.comp.php.phpunit.user/1302

그러나 대안이 있습니다. 간단히 phpunit에 경로를 전달할 수 있습니다.

phpunit library/XXX

이것은 library / XXX 디렉토리의 모든 테스트를 실행합니다.

이것이 충분하지 않은 경우 다른 옵션은 @group 주석 을 사용하여 테스트를 선택적으로 실행할 수있는 여러 범주로 나누는 것입니다.


답변

phpunit 6.1부터는 xml 설정 파일에서 속성을 사용할 수 있습니다 defaultTestSuite. 이것은 기본 옵션을 사용하는 것과 같 phpunit --testsuite xxx으며 무시됩니다.


답변

또 다른 옵션은 개별적으로 테스트하려는 각 테스트 스위트에 대해 별도의 구성 파일을 만드는 것입니다. 중복 설정을 복사 / 붙여 넣기해야하는 오버 헤드가 있지만 필요에 따라 각 구성 파일을 지정할 수 있습니다.


답변

여기에있는 다른 답변은 정확합니다. xml 구성을 사용하여이 작업을 수행 할 수 없지만 php에서 동일한 유형의 구성을 만들 수 있습니다.

확실히 가장 예쁜 것은 아니지만 필요한 기능을 제공해야합니다.

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>

가정적으로 “라이브러리”디렉토리에 3 개의 파일이 있다고 가정 해 보겠습니다.

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

그리고 각 파일에는 완벽한 명명 규칙에 따라 하나의 테스트가 포함되어 있습니다. 예 : FormTest contains testForm ()

구성을 위해 모든 것을 포함하는 구성을 만듭니다.

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

그런 다음 phpunit 명명 규칙에 따라 클래스를 생성합니다. 실제로 사용하지 않을 것이므로 원하는대로 이름을 지정할 수 있습니다.

class LibraryConfigTest extends PHPUnit_Framework_TestCase {

각 “테스트 스위트”는 단순히 원하는 테스트를 실행하는 방법입니다. 원하는대로 메서드 이름을 지정합니다. 다시 한 번 실제로 사용하지 않습니다. Phpunit이 실행을 처리합니다. 실행 방법을 알 수 있도록 그룹으로 주석을 달아야합니다.

/**
 * 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();
   }
 }
 ?>

이제 원하는 기능을 얻으려면 원하는 그룹에 대해 “config”를 실행하십시오.

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

내가 말했듯이 이것은 지속적인 유지 관리가 필요하기 때문에 추악하고 확실히 좋은 코드는 아니지만 원하는 기능을 제공합니다.

바라건대 Bergmann은 그의 다음 라운드에서이 기능을 추가 할 것입니다. 비록 그가 거의 무시하고있는 것처럼 보이지는 않지만 .


답변