特定のphpunitxmlテストスイートを実行する方法は?


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

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


<directory>が単に無視されるという問題があります。テストは実行されませんでした。with <file>を指定すると正常に動作しますが、すべて手動で指定することはできません。これらは、Test.phpファイルとクラス名の規則に従います。考え?
アレクサンダーモーランド2013年

設定ファイルを共有できますか?多くの場合、細部が疑わしいことがあります。
Josh Woodcock 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 2010

3

phpunit 6.1以降、xml構成ファイルで属性defaultTestSuiteを使用できphpunit --testsuite xxxます。これはデフォルトのオプションを使用するのと同様であり、オーバーライドされます。


1

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


1

ここでの他の答えは正しいです。xml configを使用してこれを行うことはできませんが、phpで同じタイプの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>

仮に、ディレクトリ「ライブラリ」に3つのファイルが含まれているとします。

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

また、各ファイルには、完全な命名規則による1つのテストが含まれています。例:FormTestには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.