コマンドラインの統合テスト用のPHPUnit
-
09-09-2019 - |
質問
最近、私は私たちの製品でEmail2SMS機能で作業を始めました。私は、プロジェクトに参加したときに、このコンポーネントは、ユニットテストでゼロコードカバレッジを有していました。レガシーコードます。
私はそれに取り組んでに開始して以来、私はテストファーストのアプローチを使用していました。しかし、コードの品質は非常に低かったです。それとユニット・テストにより、テストの小さなチャンクを分割することは非常に困難だったので、私は統合テストを書くことにしました。
いくつかのメッセージ情報を受け入れるPHPスクリプトは、すべてがOKであればDB内のユーザーを検索し、いくつかの情報を保存し、あります。
$last_line = system('php emailtosms.php -file=unicode_message.txt ', $retval);
$this->assertStringExistsInLogFile('Email to SMS message was not sent');
は、それが悪いかではないですか?どのようにこの問題を解決するのでしょうか?
解決
あまりよくありません。
以上のテスト可能なクラスにオフに渡し、コマンドライン引数を処理する単純なラッパーとしてemailtosms.phpスクリプトを有し、そして低いレベルのテスト、。最終段階に応じて、ほぼすべての最後の送信が、操作を行うためにユニットテストを書くことができます(多分、実際にそれを送信し、最終的なステップを模擬し、ちょうどそれを変数に格納し、その後、あなたがそこに有効な何かを持って確認してください)。
最後の統合は、完全なクラスのエンドツーエンドを実行し、その出力を確認し、最終ログを見て - または少し高いレベルで、何をログに記録するに置かれることになる。
。所属していません StackOverflow