web-dev-qa-db-ja.com

エンドツーエンドのテストを実行する場合、コードカバレッジは意味がありますか?

フレームワークで主にエンドツーエンドのテストを実行している状況があります。

  • まず、単純なフィクスチャ(CSVファイル)から始めます。
  • これらは私のアプリケーションによってインポートされます(私の状況ではブラックボックスと見なします)。
  • インポートが完了したら、リポジトリクラスを調べて、期待どおりの結果が返されるかどうかを確認し、場合によっては、データベースにクエリを送信して、期待どおりかどうかを確認します。

今ではコードカバレッジは素晴らしいと思いますが、この状況(PHP/PHPUnit/XDebug)では、コードの実行が50〜80%遅くなります(XDebugはコードカバレッジの側面の中間にあるため)。

では、この場合、何がより理にかなっているのでしょうか。

  • コードカバレッジを無効にし、実際のシナリオで実際にテストするより迅速なテストスイートを用意しますが、すべてがコードワイズでカバーされているかどうかはわかりませんか?
  • テストは遅いですが、何がテストされているのか(そして何がテストされていないのか)

物事を全体的に見ると、コードカバレッジがオンの場合は最大12分、コードカバレッジがない場合は約2〜3分かかる6エンドツーエンドのテストしかありません。

これについてどう思いますか?

1
Giel Berkers

テストするときは、コードカバレッジではなく、要件カバレッジに焦点を当てる必要があります。

コードカバレッジは、特定のコード行を使用するテストケースがあるかどうかを示します。 notそのコード行が実際にテストされた機能に貢献しているかどうかを教えてくれます。つまり、本質的に役に立たない「カバーされたコード」を持つことができます。

一方、特にエンドツーエンドのテストを実行する場合は、時間切れになるため、すべてをテストすることはできません。したがって、エンドツーエンドのテストでは、コードカバレッジはまったく意味がありません。

そして最後に、あなたはコードを顧客に販売せず、機能を販売します。

結局のところコードカバレッジは、ユニットテストがどれほど信頼できるかを感じさせます。しかし、それはそれほど重要ではないはずです。

0
Timothy Truckle

カバレッジテストのオンとオフを簡単に切り替えることができますか?もしそうなら、あなたは時折カバレッジテストを行うことができますが、それをオフにしてほとんどの機能テストを行います。

コードカバレッジテストは、テストしていないコードの機能の一部を明らかにするため、実行できる場合に適しています。テストしていない場合は、そのコードが機能するかどうかはわかりません。

5
Simon B

コードカバレッジは通常、単体テストに関するフィードバックを取得する場合にのみ役立ちます。ユニットテストは、すべてのEdgeケースをテストし、各ユニットを正しく保つための細かな点を処理する場所です。

エンドツーエンドのテストでは、通常、アプリケーションの最後の1分ごとの詳細を実行することはありません。それはそれほど有益ではありません。エンドツーエンドのテストではオフにすることをお勧めします。これは、オンになっている単体テストがあることを前提としています。

0
Berin Loritsch