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


85

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

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

답변:


129

다음은 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 구성 복제가 필요합니다!


<디렉토리>가 단순히 무시된다는 문제가 있습니다. 실행 된 테스트가 없습니다. <file>과 함께 지정하면 정상적으로 실행되지만 모두 수동으로 지정할 수는 없습니다! 그들은 Test.php 파일과 클래스 이름 규칙을 따릅니다. 생각?
Alexander Morland 2013 년

구성 파일을 공유 할 수 있습니까? 사소한 세부 사항이 종종 용의자가됩니다.
조쉬 우드 콕


20

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

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

phpunit library/XXX

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

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


글쎄, 내 게시물에서 볼 수 있듯이 이것은 정확히 내가 필요한 것이 아닙니다
Andreas Linden

그러면 내 대답의 첫 번째 링크에서 지적했듯이 할 수있는 일이 없습니다.
Anti Veeranna

3

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


1

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


1

여기에있는 다른 답변은 정확합니다. 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은 그의 다음 라운드에서이 기능을 추가 할 것입니다. 비록 그가 거의 무시하고있는 것처럼 보이지는 않지만 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.