web-dev-qa-db-ja.com

特定のphpunit xmlテストスイートを実行するには?

実行する特定のテストスイートを選択するにはどうすればよいですか?

$ 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>
74
Andreas Linden

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構成を複製する必要があります。

111
Josh Woodcock

Phpunit-userメーリングリストの次のメッセージから明らかなように、これはPHPUnitの現在のバージョンでは不可能です。 http://thread.gmane.org/gmane.comp.php.phpunit.user/1302

しかし、別の方法があります。パスをphpunitに渡すだけです。

phpunit library/XXX

これにより、library/XXXディレクトリ内のすべてのテストが実行されます。

これで十分でない場合、別のオプションは @ groupアノテーション を使用して、テストを異なるカテゴリに分割し、選択的に実行できるようにすることです。

20
Anti Veeranna

Phpunit 6.1では、xml構成ファイルで属性defaultTestSuiteを使用できます。これは、デフォルトオプションphpunit --testsuite xxxおよびオーバーライドされます。

3
Carlos C Soto

別のオプションは、個別にテストするテストスイートごとに個別の構成ファイルを作成することです。重複した設定をコピー/貼り付けする必要があるかもしれないというオーバーヘッドがありますが、必要に応じて各構成ファイルを指定できます。

1
Mike Purcell

ここの他の答えは正しいです。 XML設定を使用してこれを行うことはできませんが、PHPで同じタイプの設定を行うことができます。

それは確かに最も美しいものではありませんが、必要な機能を提供するはずです。

Xml configを提供しました

<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

そして、各ファイルには、完全な命名規則による1つのテストが含まれていること、例えば: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

先ほど言ったように、これはconstantいものであり、定期的なメンテナンスが必要になるため、必ずしも良いコードではありませんが、探している機能を提供します。

Bergmannが次のラウンドでこの機能を追加することを願っていますが、ほとんど 無視する のように見えるので、そうは思えません。

1
SuperFamousGuy