PHPUnit-構成ファイルを使用する場合、「テストは実行されません」


89

問題

コードの品質を向上させるために、平凡な最高のテストソリューションではなく、単体テストを使用してコードをテストする方法を学ぶことにしました。

私は、一般的なデータベース機能を実現できるパーソナルライブラリ用のcomposerを使用してPHPUnitをインストールすることにしました。最初はPHPUnitの構成ファイルがなく、次のようなコマンドを実行したとき。

$ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest

これはターミナルコマンドであるため、.php拡張子を含めなかったことに注意してください。上記のGeneralStringFunctionsTestは、実際にはGeneralStringFunctionsTest.phpファイルです。

出力は私が期待したものです:

時間:31ミリ秒、メモリ:2.75Mb

OK(1つのテスト、1つのアサーション)

次に、毎回手動でファイルを入力する代わりに、構成ファイルを使用してテストスイートを自動的にロードしようとしました。phpunit.xmlルートディレクトリにというファイルを作成し、ファイルに次のように入力しました。http//pastebin.com/0j0L4WBD

<?xml version = "1.0" encoding="UTF-8" ?>
<phpunit>
    <testsuites>
        <testsuite name="Tests">
            <directory>tests</directory>
        </testsuite>
    </testsuites>
</phpunit>

ここで、コマンドを実行すると、次のようになります。

phpunit

次の出力が得られます。

SebastianBergmannと寄稿者によるPHPUnit4.5.0。

/Users/muyiwa/Projects/DatabaseHelper/phpunit.xmlから読み取った構成

時間:16ミリ秒、メモリ:1.50Mb

テストは実行されませんでした!

役立つ場合、私のディレクトリ構造は次のとおりです
。src-トップレベルディレクトリ(すべてのソースコードを含む)
テスト-トップレベルディレクトリ(すべてのテストを含みsrcフォルダと同じ構造)
ベンダー-Composerサードパーティファイル

また、composer jsonとlockファイル、およびトップレベルのphpunitxmlファイルをファイルとして持っています。

私が試したこと

  • ディレクトリをに変更phpunit.xmlするtests/GeneralStringFunctions
  • ディレクトリをに変更phpunit.xmlする./tests
  • phpunit.xmlファイルをtestsディレクトリに移動してから、ディレクトリをの./代わりに変更しますtests
  • のディレクトリタグにサフィックス属性を追加しphpunit.xmlて、明示的なサフィックスとして「テスト」を指定します。

あるtests/GeneralStringFunctions/GeneralStringFunctionsTestフォルダやファイル名は?
hek2mgl 2015年

@ hek2mglこれはファイル名であり、実際にはと呼ばれGeneralStringFunctionsTest.phpます。コマンドラインインターフェイスでは、.php拡張子がないと機能するため、拡張子を入力しませんでした。
Muyiwa Olu 2015

1
OK、それであなたの設定はうまくいくはずです。ところで、接尾辞を指定する場合Test.phpTest、あなたの場合ではなく、そうする必要がTest.phpありますが、デフォルト値であるため、それを省略してもかまいません。
hek2mgl 2015年

@ hek2mgl頭を上げてくれてありがとう!私のテストが構成ファイルで実行されない理由がわかりますphpunit.xmlか?
Muyiwa Olu 2015

設定ファイルを見せてみませんか?
木曜日2015年

回答:


190

価値がある(遅れている)ために、私は最近、単純なWebサイト用の新しいLaravel5.1プロジェクトを作成しているときにこれに遭遇しました。私はそれをデバッグしようとしましたが、試したときに混乱しました:

php artisan make:test homeTest

(trueをアサートするだけのデフォルトのテストがtrueである)

そして出力を見た

No tests executed!

私にとって問題となったのは、PHPのインストールに関連していました。「phpunit」はグローバルに登録され、異なる構成で構成されていましたが、Laravelのインストールに付属のphpunitは適切に構成され、完全に実行されました。

したがって、修正はベンダーの構成済みphpunitを(app /およびtests /と同じルートディレクトリから)実行しています。

./vendor/bin/phpunit

それが他の誰かを助けることを願っています!


4
これがおそらく正解だと思います。その後、プロジェクトを削除したので、再確認する方法はありませんが、composerを使用する将来のプロジェクトでvendor/bin/phpunitは、グローバルphpunitバイナリの代わりに常に使用しています。グローバルphpunitバイナリを削除するところまで行ったので、誤って同じ間違いを繰り返さないようにしています。それ以来、ポップアップは表示されていません。それが理由である可能性が最も高いので、私はこれを受け入れられた答えとしてマークします。
Muyiwa Olu 2017

3
呼び出し./vendor/bin/phpunitは、新しいlaravel 5.4インストールで私のためにトリックをしました
ira

同様に、これはWordpressプロジェクトに取り組んでいるときに私を助けました。同じ問題:「phpunit」はグローバルに登録され、異なる方法で構成される可能性があります。共有してくれてありがとう!
sqsinger 2017

これで修正されましたが、phpunitをグローバルに修正する方法はありますか?入力するだけでいいのですがphpunit
Noitidart 2017年

2
あなたが作成することができます@Noitidartaliasのため ./vendor/bin/phpunit
ガネーシュK

98

XMLファイルはそのままで問題ありません。ただし、tests/フォルダ内のPHPファイルの名前が次のようになっていることを確認する必要があります。

tests / Test.php <---大文字の「T」
tests / user Test.php
tests / fooBarTest.php
などに注意してください。

ファイル名は「Test.php」で終わる必要があります。これは、PHPUnitがディレクトリ内で探しているものです。

さらに、すべてのテストメソッドには「test」で始まる名前を付ける必要があります。

public function testFooBar()
{
    // Your test code
}

お役に立てば幸いです。


4
または--test-suffix=anything.php、オーバーライドに使用できます
チェックサム2016年

私にとっては、テストフォルダへの相対パスを絶対パスに置き換えると便利でした。
Timur Samkharadze 2017年

構成ファイルでこれをオーバーライドするにはどうすればよいですか?
ジョナサン

19

Windowsでは、ターミナルで次のコマンドを使用します

.\vendor\bin\phpunit

それはコマンドが

phpunit

「テストは実行されていません!」を返します。

Macを使用している間

./vendor/bin/phpunit

それが役に立てば幸い。


あなたの答えをどうもありがとう、これは本当に役に立ちます。
Goke Obasa 2018

必ず何がありますことはないphpunit(あなたのような何かを実行していることを確認することができ、あなたのグローバルパスでphpunit --version。。。そしてそれのマッチングは、あなたが期待しwhat'reするかどうかを確認XAMPPは通常、同じPHPのbinディレクトリにはPHPUnitをインストールすることが問題だった私には
giovannipds

12

仮想マシンのPHPUnitがバージョン6に更新された後も、同じ問題が発生しました。--debugと--verboseでさえ、「テストが実行されなかった」だけで、何も役に立ちませんでした。結局、新しいバージョンではクラスと名前空間が変更され、古いクラスへの参照を含むファイルを実行したくなかったことが判明しました。私にとっての修正は、すべてのテストケースでこれを置き換えることでした:

class MyTestCase extends \PHPUnit_Framework_TestCase {...}

と:

use PHPUnit\Framework\TestCase;

class MyTestCase extends TestCase {...}

ああ、はい、これは元の質問に対する答えではないようですが、6.xにアップグレードした後に問題が解決しました!
多摩

これは、PHPUnit 5.7から8.5にアップグレードするときの問題でもありました。ヒントをありがとうございます!
確認者

7

これはとても古いことだと思いますが、私にも起こりました。うまくいけば、これは誰かを助けるでしょう。

私の問題は、/ ** @test * /の「@」記号を忘れてしまったことでした。

違う:

/** test */
function a_thread_can_be_deleted()
{
    ...
}

正しい:

/** @test */
function a_thread_can_be_deleted()
{
    ...
}

1
2年以上後、これが私にとってのことでした。コメントには、まさにその形式である必要があります。そこにスペースが足りませんでした。それはそれを検出しませんでした。何が私は職人makeコマンドを使用laravel 6.1で、少し迷惑なんだし、それはそのコメントは含まれていません
aibarra

1
この回答は役に立ちます
Sundar

パッケージを開発しているときに問題が発生しました。'php artisan make:test SomeTest'を実行してパッケージtestsディレクトリに移動すると、基本的なtestExampleメソッドのコメントには基本的な説明のみが含まれ、@return void'@ test'は含まれません。これがphpunitが識別できなかった理由です。テストとして。
DAMIEN JIANG

5

--debug(ちなみに良い方法)を使用してファイル名が命名規則を尊重していないという単純な事実を発見する前に、10分間髪を引っ張ったので、最後に余分な「s」がありました。 。

違う

CreateAdminTests

正しい

CreateAdminTest

このメモが誰かに役立つことを願っています


その後、テストを実行できました
WindSaber 2018



2

PHPSTORMを使用している場合は、[設定]に移動してから[

  • Test Frameworks

    +をクリックして選択します

  • PHPUnit Local その後

  • Use Composer Auto Loader 次に、これをスクリプトフィールドへのパスのように貼り付けます

  • C:\{YOUR PROJECT NAME}\vendor\autoload.php

  • [OK]をクリックします

  • HAPPY TESTING


2

phpunit.xmlファイルを確認し、testsuitesの内部を確認してください。

私のバージョンのphpunit(2019)は、末尾のファイル(サフィックス)* Test.phpを探しています。したがって、すべてのテストファイルに適切な名前が付けられていることを確認してください(例:BookTest.phpが正しい、BookTests.phpが正しくない、BookTestCase.phpが正しくない)。


2

パーティーに遅れて来ましたが、この情報は他の人を助けるかもしれません。

上記の解決策は私にはうまくいきませんでした。Laravel 7.x以降、デフォルトでは、PHPUnitは「Test.php」という接尾辞が付いたPHPファイルのみを実行します。たとえば、テストを作成する場合、名前を付けることCreateUserはできませんが、名前を付けることはできCreateUserTestます。

制限を克服するには、要素に移動しphpunit.xmlsuffix属性を変更しますdirectory

...
<testsuite name="Unit">

    <!-- modify suffix -->
    <directory suffix=".php">./tests/Unit</directory>

</testsuite>
<testsuite name="Feature">

    <!-- modify suffix -->
    <directory suffix=".php">./tests/Feature</directory>

</testsuite>
...

これは.php、ディレクトリから拡張子を持つすべてのファイルを実行するようにPHPUnitに指示します。更新後にアプリのキャッシュをクリアすることに注意してくださいphpunit.xml

php artisan config:cache

PHPUnit XML構成に関する追加情報は、https//phpunit.de/manual/6.5/en/appendixes.configuration.htmlにあります。


1

phpunit.xmlファイルにテストスイートを追加しましたか?

<phpunit>
    <testsuite name="app1" >
        <directory>./</directory>
    </testsuite>
</phpunit>

そこに複数のディレクトリを追加できます。


こんにちは。質問で明確にしなかった場合は申し訳ありませんが、テストスイートと対応する名前をXMLファイルに追加しました。コピーはここにあります:pastebin.com/0j0L4WBD
ムイワオル2015

<directory> ./ tests </ directory>をお試しください
Aine 2015年

更新していただきありがとうございます。残念ながら、。/ testsでディレクトリと同じ問題が発生します。Time: 28 ms, Memory: 1.50Mb No tests executed!
Muyiwa Olu 2015

残念ながら同じ問題:( Configuration read from /Users/muyiwa/Projects/Web Development/DatabaseHelper/phpunit.xml Time: 66 ms, Memory: 1.50Mb No tests executed!。手動で参照すると間違いなく機能します。何らかの理由で構成ファイルからロードするのが好きではありません:(
Muyiwa Olu 2015

最後の推測。phpunit.xmlファイルをtests /ディレクトリに移動してみてください。ファイルで、ディレクトリを<directory> ./ </ directory>に変更します。
アイネ2015年

0

私にとって、phpunit --debugを使用すると、実行されていないテストが表示されました。

$this->visit('/')
         ->see('Laravel');

ディレクトリは.htaccess認証で保護されていたため、ページにアクセスできなかったと思います

私にとっての解決策は、このテストを実行することでした(または、おそらく.htaccess認証を実行することでした)


0

これは非常に遅いですが、誰かに役立つことを願っています。

絶対参照を使用してテストを実行しました。フォルダ構造[project / tests / test.php]

私のディレクトリ行は次のようになりました./tests/test.php


0

少し側かもしれませんが、(私のように)VagrantでLaravelを使用している場合は、「windows側」ではなく、vagrantボックス内でphpunitを実行していることを確認してください。:)


0

うまく設定されていても、テストが実行されないという問題がありました。

原因は、名前空間がファイルの最初のコマンドではなく、いくつかのdoc-blockコメントの後であったことです。

元に戻すと、phpunitはテストを認識し、正しく実行されました。


0

私のは少し面白かった。

私が使用したとき、私php artisan make:testは誤って作成したような.phpを置き、phpunitは単にそれを無視しました。ProductRewardPointController.phpProductRewardPointController.php.php

余分な.phpを削除して通常の状態に戻します


0

テストが実行されないという同じ問題がありました!ファイル名とクラス名を同じにすることで解決しました。


0

JetBrains PHPStormなどのIDEを使用している場合は、次の点にも注意してください。Run/Debug Configurationsウィンドウで、そのディレクトリをフォルダのある場所にTest scope設定しdirectory、ポイントする必要がありますtests

ディレクトリを設定するのを忘れたのを理解するのに30分かかりました。phpunit.pharテストスコープとディレクトリを正しく設定している限り、グローバルを使用できます。IDEが他のものを処理します。


0

テストファイル内の関数名には、接頭辞を付けるかtest、関数の前にコメントを追加する必要があります

/** @test */

そうでないことを確認してください

/* @test */

それはうまくいかないからです。スラッシュの後には、1つではなく2つのアスタリスクが必要です。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.