web-dev-qa-db-ja.com

XML構成でPHPUnitテストスイートからファイルを除外する方法

PHPUnit用の非常にシンプルなXML構成を以下に示します。

<phpunit bootstrap="/_tests/TestAutoload.php">
    <testsuites>
        <testsuite name="Unit Tests">
            <directory suffix=".php">_tests</directory>
        </testsuite>
    </testsuites>
</phpunit>

このディレクトリ内の特定のファイルをテストスイートから除外する方法は?私は試した <exclude>および<blacklist>、ただし、このコンテキストでは機能しないようです。 phpunit.de one以外のドキュメントも見つかりませんでした。それ以外の場合、この構成は完全に機能します。

39
Ondrej Slinták

特定のテストを実行しないいくつかの方法があります-ブラックリストに入れて実行しないようにすることはできないかもしれません-変更するとブラックリストを編集することを意味し、多くの場合、バージョン管理に出入りすることになります。 。

より適切かもしれない他のいくつかの方法があります:

テストを実行する準備がまだ整っていない場合:

_$this->markTestIncomplete('This test has not been implemented yet.');
_

外部で実行するべきでない理由がある場合は、スキップしてください:

_if (!extension_loaded('mysqli')) {
    $this->markTestSkipped('The MySQLi extension is not available.');
}
_

これをsetUp()関数に入れることもできるので、テストクラスのすべてのテストがスキップされます。

成功した​​前のテストに依存するテストを作成できます:

_public function testEmpty()
{
    $stack = array();
    $this->assertTrue(empty($stack));
    return $stack;   // also sends this variable to any following tests - if this worked
}
/**
 * only runs if testEmpty() passed
 *
 * @depends testEmpty
 */
public function testPush(array $stack)
{
}
_

@ group -name-アノテーションは、特定のグループのテストを明確に停止または実行するための最良の方法の1つです

_/**
 * @group database
 * @group remoteTasks
 */
public function testSomething()
{
}
_

testSomething()が2つのグループになり、どちらかがコマンドライン(またはconfig.xml)に追加された場合は_--exclude-group_パラメーター。実行されません。同様に、特定のグループに属するテストのみを実行することができます。たとえば、機能にちなんで名付けられたテストやバグレポートなどです。

39
Alister Bulman

ファイル名TestCase.phpを除外します。

これをあなたのphpunit.xmlに追加してください

<testsuites>
    <testsuite name="BLABLA">
        <directory suffix=".php">./tests</directory>
        <exclude>./tests/TestCase.php</exclude>
    </testsuite>
</testsuites>

実際のテストスイート からの追加の抜粋を以下に示します。

...
    <testsuites>
        <testsuite name="n98-magerun-tests">
            <directory>./tests</directory>
            <exclude>tests/N98/Magento/Command/Installer/UninstallCommandTest.php</exclude>
        </testsuite>
    ...
38
Mahmoud Zalt

このPHPUnit構成ファイルは、私が非常に良い経験をしたものです。

<?xml version="1.0" encoding="UTF-8"?>
<phpunit
    convertErrorsToExceptions="true"
    convertNoticesToExceptions="true"
    convertWarningsToExceptions="true"
    colors="true"
    processIsolation="true"
    stopOnFailure="true"
    syntaxCheck="false"
    backupGlobals="false"
    bootstrap="test-bootstrap.php">
    <testsuites>
        <testsuite name="php-dba-cache">
          <directory suffix="Test.php">tests</directory>
        </testsuite>
    </testsuites>
    <logging>
        <log type="coverage-html"
             target="build/coverage"
             charset="UTF-8"
             yui="true"
             highlight="true"
             lowUpperBound="35"
             highLowerBound="70"/>
   </logging>
    <filter>
        <whitelist addUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">src</directory>
            <exclude>
             <file>test-bootstrap.php</file>
            </exclude>
        </whitelist>
    </filter>
</phpunit>

https://github.com/gjerokrsteski/php-dba-cache

8
gjerokrsteski

phpunit documentation は、テストスイートでの除外に関しては少しミニマルです。明らかに、ディレクトリ全体のみを除外できますが、個々のファイルは除外できません。私は間違いが証明されてとても嬉しいです。回避策は、@ group機能を 上記に投稿 としてAlister Bulmanによって使用しているようです。

保持したいテストスイートのすべてのテストにタグを付ける必要があるのは、ちょっとした苦痛です。

4
Bernhard Wagner

Phpunit 6.5の場合、excludewhitelistの下にあります

<filter>
    <whitelist>
        <directory suffix=".php">src</directory>
        <exclude>
            <directory>src/Migrations</directory>
            <file>src/kernel.php</file>
        </exclude>
    </whitelist>
</filter>
4
goto

上記のソリューションに加えて、次のように_phpunit.xml_からテスト、ディレクトリ、およびテストスイートを管理する、よりアーキテクチャ駆動のテストワークフローを使用できます。

  • テストをディレクトリにグループ化します(例:_tests/Unit_、_tests/Feature_);
  • _<testsuite>_ 要素を使用してディレクトリをグループ化する必要があるので、テストスイートを作成します。
  • 完全なテストスイートとして実行するすべてのデフォルトテストを組み合わせたAllテストスイートを作成し、 _defaultTestSuite="All"_ 内の_<phpunit>_キーを介して割り当てます素子。
  • 通常のテストワークフローから除外するサンプルテストなどをいじくり回したり、維持したりするために使用できるテストを備えた専用のTinkerテストスイートを作成します。 Allテストスイートに含めないでください。

したがって、次のことができるようになります。

  • phpunit CLIコマンドを使用して、常にデフォルトのAllテストを実行します。
  • cLIを使用して、テストスイート、テストファイル、または任意のテストスイートの単一のテストレベルでフィルタリングします。例:
    • _phpunit --testsuite SuiteOne_、
    • _phpunit --filter SomeTest_または
    • _phpunit --filter SomeTest::test_some_test_method_
    • _--testsuite_と_--filter_引数を組み合わせる

IDE(Sublime Textには MacLinux/Windows プラグイン)を使用すると、実行するテストを即座に選択できるようになります。

2
Valentine Shi