web-dev-qa-db-ja.com

Phpunitで一つのテストメソッドを実行する方法

ファイルescalation/EscalationGroupTest.php内でtestSaveAndDropという名前の単一のテストメソッドをphpunitで実行するのに苦労しています。私は以下の組み合わせを試しました:

phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=escalation/EscalationGroupTest.php::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=EscalationGroupTest.php::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=EscalationGroupTest::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=testSaveAndDrop

いずれの場合も、ファイルescalation/EscalationGroupTest.php内の all testメソードが実行されます。代わりに1つの方法だけを選択する方法は?

クラスの名前はEscalationGroupTestで、phpunitのバージョンは3.2.8です。

247
Alex

次のコマンドは、単一の方法でテストを実行します。

phpunit --filter testSaveAndDrop EscalationGroupTest escalation/EscalationGroupTest.php

phpunit --filter methodName ClassName path/to/file.php

Phpunitの新しいバージョンでは、それはちょうどです:

phpunit --filter methodName path/to/file.php
346
Alex

私はアノテーションでテストをマークするのが好きです

/**
 * @group failing
 * Tests the api edit form
 */
public function testEditAction()

それからそれを実行します

phpunit --group failing

コマンドラインでフルパスを指定する必要はありませんが、コードを乱雑にしないために、コミットする前にこれを削除することを忘れないでください。

1回のテストで複数のグループを指定することもできます

/**
  * @group failing
  * @group bug2204 
  */
public function testSomethingElse()
{
}
189
iamtankist

これがより一般的な答えです。

メソッド名が一意であることが確実な場合は、メソッド名でのみフィルタリングできます (これは私には有効です)

phpunit --filter {TestMethodName}

ただし、ファイルパス/参照も指定する方が安全です。

phpunit --filter {TestMethodName} {FilePath}

例:

phpunit --filter testSaveAndDrop reference/to/escalation/EscalationGroupTest.php

クイックノート:コマンドphpunit --filter testSaveを使用してtestSaveという名前の関数とtestSaveAndDropという名前の別の関数がtestSaveAndDroptestSave*で始まる他の関数も実行することに気付いたことに気付きました。

104
Mahmoud Zalt

以下のコマンドは exact testSaveAndDrop testを実行します。

phpunit --filter '/::testSaveAndDrop$/' escalation/EscalationGroupTest.php
36
Farid Movsumov

だから、このようなもの

phpunit --filter 'EscalationGroupTest::testSaveAndDrop' EscalationGroupTest escalation/EscalationGroupTest.php 

=なしおよび'あり

https://phpunit.de/manual/3.7/en/textui.h​​tml

18
sectus

多くの方法でlaravelで実行phpunitテストのために..

vendor/bin/phpunit --filter methodName className pathTofile.php

vendor/bin/phpunit --filter 'namespace\\directoryName\\className::methodName'

テストシングルクラスの場合:

vendor/bin/phpunit --filter  tests/Feature/UserTest.php
vendor/bin/phpunit --filter 'Tests\\Feature\\UserTest'
vendor/bin/phpunit --filter 'UserTest' 

テストシングルメソッド用:

 vendor/bin/phpunit --filter testExample 
 vendor/bin/phpunit --filter 'Tests\\Feature\\UserTest::testExample'
 vendor/bin/phpunit --filter testExample UserTest tests/Feature/UserTest.php

名前空間内のすべてのクラスからテストを実行します。

vendor/bin/phpunit --filter 'Tests\\Feature'

より多くの方法のためにテストを実行しなさい もっと見る

13
Jignesh Joisar

NetBeansを使用している場合は、テストメソッドを右クリックして[Run Focused Test Method]をクリックします。

Run Focused Test Method menu

7
Tony

あなたはこれを試すことができます私は単一のテストケースを実行することができます

phpunit tests/{testfilename}

例えば:

phpunit tests/StackoverflowTest.php

Laravel 5.5で単一のテストケースを実行したい場合

vendor/bin/phpunit tests/Feature/{testfilename} 

vendor/bin/phpunit tests/Unit/{testfilename} 

例えば:

vendor/bin/phpunit tests/Feature/ContactpageTest.php 

vendor/bin/phpunit tests/Unit/ContactpageTest.php
7
Amit Kumar

テストがすべて実行されているのは、ファイル名の後に--filterフラグがあるからです。 PHPUnitはオプションをまったく読んでいないので、すべてのテストケースを実行しています。

ヘルプ画面から:

 Usage: phpunit [options] UnitTest [UnitTest.php]
        phpunit [options] <directory>

@Alexと@FeridMövsümovの回答にあるように、--filter引数をテストファイルの前に移動します。そして、あなたはあなたが走らせたいテストだけを持つべきです。

4
Schleis

XML設定ファイルを使用している場合は、phpunitタグ内に次のコードを追加できます。

<groups>
  <include>
    <group>nameToInclude</group>
  </include>
  <exclude>
    <group>nameToExclude</group>
  </exclude>
</groups>

https://phpunit.de/manual/current/en/appendixes.configuration.htmlを参照してください

1
user276648

単一のテストメソッドを実行するには--filterを使わなければなりませんphp phpunit --filter "/::testMethod( .*)?$/" ClassTest ClassTest.php

上記のフィルタはtestMethodを単独で実行します。

0
Umair Anwar