この記事の対象者
まだテストを開始していないが、そのような欲求を持っている人に最も可能性があります。 この問題の経験豊富な開発者は驚くことはできませんが、まだ世界の側に行っていない人は、このステップをプッシュしようとします。
背景
私は自動テストを行うことにしました。 以前は、これは必要ありませんでしたが、それでも特に必要ありませんでした。 しかし、空き時間があったので、将来のために有益な時間を過ごすことにしました。
理論を読んだ後、彼はこのためのツールを探し始めました。 予想通り、地平線上に最初に現れたのはPhpUnitです。 しかし、彼はなんとなくかさばっているかのようでした。
さまざまな種類のテスト、表現力豊かな構文-Codeceptionの方が便利だと思われました。 しかし、中毒を見て、私はそれほど多くのものを必要としないことに気づきました。
単純化に向かって、私はatoumを見つけ、そして一般的にTestify.phpと呼ばれるクールなものを見つけました。 ついに必要なものを見つけたと思いました。
しかし、私は早く幸せでした。 最初のテストを作成するときにTestify.phpが機能しませんでした。 デバッグが有効かどうかに応じて、呼び出しを処理または無視できるキャッシュクラスをテストしました。 デバッグモードでは値がtrue / falseのDEBUG定数が存在することを前提としているため、1つのプロセスでその定数をオーバーライドすることはできません。
必要条件
これらの検索の後、私は次の簡単なツールが必要であることに気付きました。
- さまざまなプロセスでテストして必要な定数を決定したり、さまざまな方法でさまざまなテスト用に同じクラスを模擬したりします。
- できるだけシンプルに使用します。
- ブラウザとコマンドラインの両方で機能します
- Travis CIと一緒に使用できます(コンソールバージョン-テストが成功した場合、ステータス0を返します)。
実装
http経由でテストを開き、結果を収集し、表示可能なHTML形式で生成する小さなスクリプトが作成されました。 コンソールバージョンのテストプロセスを同様にするために、PHP 5.4+の組み込みWebサーバーを使用することが決定されました。 次のように始まります。
// $web_server_pid = exec("php -S localhost:$this->port >/dev/null 2>/dev/null & echo $!"); // //... // exec("kill $web_server_pid");
そして、期待どおりに機能しました。 そのため、同様のツールは見つかりませんでした。パッケージを独立した作曲家としてアレンジし、双方向性を追加することにしました(テストスイートの進行状況は、HTMLとコンソールバージョンの両方でリアルタイムに表示されます)。
テストの実行:
// test.php require __DIR__.'/vendor/autoload.php'; (new \nazarpc\CSTester(__DIR__.'/tests'))->run();
これで、このファイルはブラウザまたはコンソールで開くことができます
php test.php
テスト自体はそれほど複雑ではありません。
return 5 != 3 ? 0 : 'Strange PHP';
つまり、個々のテストは、テストが成功すると0を返すファイル、またはエラーが発生した場合はエラーのテキストを返します。
コンソールオプションの結果の例:
すべてのテストスイートの前と、同じスイートのすべてのテストの前の両方で、共通のコマンドを実行することができます。
あなたはもっと良くできると確信しているので、建設的な批判と提案を楽しみにしています。
依存関係はありません。裸のPHP 5.4+で可能です。
GitHubリポジトリ: github.com/nazar-pc/CSTester
Composerパッケージ: packagist.org/packages/nazar-pc/cstester