16

コマンド ラインを使用してテストを実行するときに問題が発生しました。次のように phpunit を実行すると、次のようになります。

phpunit -–no-configuration -–filter testAdd DataTest DataProviderTest.php

それは正常に動作します。ただし、正規表現を使用して、テストするメソッドの名前を正確に指定します。

phpunit -–no-configuration -–filter /::testAdd$/ DataTest DataProviderTest.php

残念ながら、2番目のアプローチは機能しません。ソースコードは次のとおりです。

<?php
class DataTest extends PHPUnit_Framework_TestCase
{
    /**
     * @dataProvider provider
     */
    public function testAdd($a, $b, $c)
    {
        $this->assertEquals($c, $a + $b);
    }

    public function provider()
    {
        return array(
          array(0, 0, 0),
          array(0, 1, 1),
          array(1, 0, 1),
          array(1, 1, 3)
        );
    }
}

?>
4

5 に答える 5

15

データセットの有無にかかわらずテストを処理するための正規表現は

phpunit --filter "/::<method>( with data set .*)?$/" <class> <file>

例えば

phpunit --filter "/::testAdd( with data set .*)?$/" DataTest DataProviderTest.php

テストメソッドは、データセットがない限り、名前にスペースが含まれないため、これを実際に次のように縮小できます。

phpunit --filter "/::testAdd( .*)?$/" DataTest DataProviderTest.php
于 2012-08-30T17:37:11.533 に答える
7

@sjoerdが指摘したように、照合される名前にはデータセットの番号が含まれています。

つまり、これは機能します。

phpunit --filter "testAdd with data set #0" DataTest DataProviderTest.php

あなたのファイルに対して生成:

PHPUnit 3.7.0RC1 by Sebastian Bergmann.

.

Time: 0 seconds, Memory: 5.25Mb

OK (1 test, 1 assertion)

PHPUnit 3.5 以降でテスト済み。


それは本当にきれいではなく、PHPUnit内でこれに別の構文を使用することは間違いなく望ましいですが、今のところは問題を解決する可能性があり、誰かがPRを送信したら、使用する方が良いでしょう;)

上のより良い構文の追跡の問題phpunit github issue tracker

于 2012-08-30T13:52:12.097 に答える
2

回答の正規表現は機能しなくなったようです (少なくとも 4.0.12 では機能しません)。

--filter はスペースが気に入らないようで、次のエラーが発生します。

致命的なエラー: "preg_match(): コンパイルに失敗しました: オフセットに ) がありません

これは、スペースを \s に置き換えることで修正されます。引用符も削除する必要があります (または、\ を \ にする必要があります)。

phpunit --filter /::testAdd(\s.*)?$/ DataTest DataProviderTest.php
于 2015-10-22T18:23:02.293 に答える
1

この場合、正規表現は次の文字列と照合されます。

DataTest::testAdd with data set #0
DataTest::testAdd with data set #1
...

したがって、当然、正規表現は機能しtestAdd$ません。

于 2012-08-30T10:42:41.530 に答える