1

私は、単体テストのカバレッジを持つPHPプロジェクトに取り組んでいます。タグ付けユニットテスト

私は、前回、ユニットテストのコマンドラインテストランナー '--filterコマンドで非常にトリッキーな操作をしています。

--filter

のみ名を指定されたパターンに一致するテストを実行します:ここで

は、公式ドキュメントから、このコマンドの説明です。パターンは、単一のテストの名前か、複数のテスト名に一致する正規表現のいずれかです。時にはそれが全体のテストベースから1つだけのテストスイートまたはテストケースを実行するために非常に便利になりますので、私はofterそれを使用

これは良い練習であるかどうか、私は疑問に思っていますか?

私はあなたが確かに知っ場合、時にはあなたがそれそれ、一成分のみと100%パーセントの自信を持って変更したことに、あなたの継続的インテグレーション・マシン上で全体のテストスイートを実行することをお勧めであることを聞いたことがあります他のコンポーネントの単体テストは失敗しません。 あなたはどう思いますか?

時間の経過とともに、すべてのユニットテストを実行する必要がありますが、非常に複雑なビジネスロジックや単体テストがある場合、時間がかかることがあります。

私は、「本当の」単体テストはDBとやりとりしてはいけない、モック/スタブオブジェクトを使うべきだと私は理解します。しかし、時には、テスト用にDBフィクスチャを使用する方がずっと簡単です(安価です)。

この問題を解決する方法を教えてください。

答えて

1

良いユニットテストをすべき:

  • 実行の高速ドキュメントとして機能するように明確なメソッド名や変数名を持っています。これはまた、複雑なビジネス 論理のテストのために 可能です。テストは、約0.1秒の平均時間で平均値 で実行する必要があります。
  • は、外部ファイルシステム、電子メールなどのリソース、 データベース、Webサービス、および 他のすべてと統合していない一つの試験方法で
  • テストを正確に一つのこと。 個別のデータベース統合テスト を作成して、データベースのineractionをテストできます。 これらのテストでは、ほとんどの場合、ユニット のテストが遅くなります。私は私の 統合テストを別々の プロジェクトに入れました。私は の統合コードで作業しているときにのみ実行します。 I も、CI サーバーのすべてのビルドで実行します。
  • 互いに完全に分離してください。 に依存するテストがある場合、 テストが失敗したことを読み取ることによって何が の問題か分かりません。問題を見つけるには debugにする必要があります。隔離された テストはあなたに多くの時間を節約します。

個人的には、テストではカテゴリ名を使用しません。アプリケーションごとに2つのテストプロジェクトを使用します。 1つは単体テスト用で、もう1つは統合テストと低速テスト用です。上

反応:

"しかし、時には、それは テスト用DB器具を使用する(安く)が容易 くらいです。"

あなたのコードがうまく書かれていると、模擬するのがより簡単になります。私はPHPでフレームワークを嘲笑することについては知らないが、私は多くの時間を節約するためにそれらを他の言語で使っている。最初にテストを書くことは、テスト容易になるようにコードを設計するのに役立ちます。

は個人的に私は読書がコースの多くのテストを書いて他人

  • によって書かれたコードをテストし、それについての本
  • を読んで、それについてのブログ
  • を読ん

    • ことによって、より良いテストすることを学びました。それをうまくするためには、数千万のテストが必要でした。時にはそれが全体のテストベースから1つだけのテストスイートまたはテストケースを実行するために非常に便利になりますので、私はofterそれを使用
  • +0

    hm ..高速プロジェクトと低速テストを別々のプロジェクトに分割することについての非常に新しいアイデアです。とても面白いです。以前にも述べたように、ユニットテストではなく統合テストであるため、テストが遅くなるように見えます。ありがとうございました – ep3static

    1

    これは良い練習であるかどうか、私は疑問に思っていますか?定期的に「面白い」のテストを実行する

    限り(CIサーバは完璧なサウンドを経由して)あなたは時折ユニット・テストのフルセットを実行すると、

    確か

    はほとんどすべてのテストを実行していないよりはましです。..

    0

    私は、コミットする前にを実行する必要があるテストのサブセット(「スモークテスト」)を実行し、CIサーバーから一連のテストを実行することで問題を解決しました。

    テストの完全なセットが15分を超える場合は、それらを分割して並行して実行します。

    --filterを使用すると、最初に最も関心のあるテストを実行した後、コミットする前にスモークテストを実行し、残りをCIサーバーから実行することができます。

    関連する問題