コードの品質を向上させるために、最高のテストソリューションではなく、単体テストを使用してコードをテストする方法を学ぶことにしました。
私は、一般的なデータベース機能を実現できる個人ライブラリ用に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
次の出力が得られます。
Sebastian Bergmannおよび寄稿者によるPHPUnit 4.5.0。
/Users/muyiwa/Projects/DatabaseHelper/phpunit.xmlから読み取った構成
時間:16ミリ秒、メモリ:1.50Mb
テストは実行されませんでした!
役に立つ場合には、私のディレクトリ構造は次のとおりです。
src-最上位ディレクトリ(すべてのソースコードを含む)
tests-最上位ディレクトリ(すべてのテストがmysrcフォルダーと同じ構造になっています)
vendor-Composerサードパーティファイル
composer jsonファイルとロックファイル、およびファイルとして最上位にphpunit xmlファイルもあります。
phpunit.xml
のディレクトリをtests/GeneralStringFunctions
に変更するphpunit.xml
のディレクトリを./tests
に変更するphpunit.xml
ファイルをtests
ディレクトリに移動し、ディレクトリをtests
ではなく./
に変更します。phpunit.xml
のディレクトリタグにサフィックス属性を追加して、明示的なサフィックスとして「テスト」を指定します。価値がある(遅刻している)ために、単純なWebサイト用の新しいLaravel 5.1プロジェクトを作成しているときに、最近これに遭遇しました。私はそれをデバッグしようとしましたが、試したときに混乱しました:
php artisan make:test homeTest
(trueがtrueであるとアサートするデフォルトのテストがあります)
そして、出力を見ました
No tests executed!
最終的に私にとって問題となったのは、私のPHPインストールに関連していました。「phpunit」はグローバルに登録および設定が異なりましたが、Laravelインストールに付属するphpunitは正しく、完璧に走りました。
したがって、修正プログラムはベンダーの構成済みphpunitを実行しています(app /およびtests /と同じルートディレクトリから)。
./vendor/bin/phpunit
それが他の誰かを助けることを願っています!
XMLファイルはそのままで問題ありません。ただし、tests/
フォルダー内のPHPファイルの名前が次のようになっていることを確認する必要があります。
tests/Test.php <---大文字の「T」に注意してください
tests/user Test.php
tests/fooBar Test.php
等。
ファイル名は「Test.php」で終わる必要があります。これは、PHPUnitがディレクトリ内で探しているものです。
さらに、すべてのテストメソッドには、「test」で始まる名前が必要です。
public function testFooBar()
{
// Your test code
}
お役に立てば幸いです!
Windowsでは、ターミナルで次のコマンドを使用します
.\vendor\bin\phpunit
コマンドの場合
phpunit
「テストは実行されていません!」を返します
macで
./vendor/bin/phpunit
それが役に立てば幸い。
仮想マシンのPHPUnitをバージョン6に更新した後も、同じ問題が発生しました。--debugと--verboseでも、有用なことは何も言わず、「テストは実行されませんでした」だけです。最終的に、新しいバージョンではクラスと名前空間が変更され、古いクラスへの参照を含むファイルを実行したくなかったことが判明しました。私にとっての修正は、すべてのテストケースでこれを置き換えることでした:
class MyTestCase extends \PHPUnit_Framework_TestCase {...}
で:
use PHPUnit\Framework\TestCase;
class MyTestCase extends TestCase {...}
ベンダーファイルから呼び出すだけでよい
vendor\bin\phpunit
Notice\Not /
-debug(ちなみに良い方法)を使用してファイル名がそうではないという単純な事実を発見する前に、10分間髪を引っ張りました命名規則を尊重します、最後に余分な「s」がありました。
違う
CreateAdminTests
右
CreateAdminTest
このメモが誰かに役立つことを願っています
PHPSTORMを使用している場合は、設定に移動してから
Test Frameworks
[+]をクリックして選択します
PHPUnit Local
その後Use Composer Auto Loader
その後、スクリプトフィールドへのパスにこのように貼り付けますC:\{YOUR PROJECT NAME}\vendor\autoload.php
HAPPY TESTING
私はこれが非常に古いことを認識していますが、それは私にも起こりました。これが誰かの助けになることを願っています。
私の問題は、/ ** @test * /で「@」記号を忘れたことです。
違う:
/** test */
function a_thread_can_be_deleted()
{
...
}
右:
/** @test */
function a_thread_can_be_deleted()
{
...
}
Phpunit.xmlファイルにテストスイートを追加しましたか?
<phpunit>
<testsuite name="app1" >
<directory>./</directory>
</testsuite>
</phpunit>
そこに複数のディレクトリを追加できます。
多分少しですが、もしあなたが(私のように)VagrantでLaravelを使用している場合は、「windows side」ではなく、vagrantボックス内でphpunitを実行していることを確認してください。 :)
テストが実行されていない!の同じ問題がありました。同じ名前のfileとclass nameを維持することで解決しました。
私にとって、phpunit --debugを使用すると、どのテストが実行されていないかがわかりました。
$this->visit('/')
->see('Laravel');
ディレクトリは.htaccess認証で保護されていたため、ページにアクセスできなかったと思います
私にとっての解決策は、このテストを実行することでした(または、.htaccess認証を実行する可能性が高い)。
うまくセットアップされていても、テストが実行されないという問題がありました。
原因は、ネームスペースがファイルの最初のコマンドではなく、いくつかのdocブロックコメントの後だったためです。
復帰すると、phpunitはテストを表示して正しく実行されました。
これは非常に遅いですが、誰かの助けになることを願っています。
絶対参照を使用してテストを実行しました。フォルダー構造[project/tests/test.php]
私のディレクトリ行は次のようになりました./tests/test.php
私は少し面白かった。
php artisan make:test
を使用したときに、誤って。phpを入れたProductRewardPointController.php
のようにProductRewardPointController.php.php
とphpunitは単に無視しました。
余分な。phpを削除し、通常の状態に戻します