2

私はstackoverflowを見て、これと似たタイトルの質問を1つまたは2つ見つけることができましたが、私が求めていることに答えるものはありません. これが重複していたらごめんなさい。

Unity テストでは、「テストごとに 1 つのアサーション」というガイドラインがあります。stackoverflow やインターネットを読んでみると、このルールは少し緩和できることが一般的に認められていますが、すべての単体テストでは、コードの 1 つの側面または 1 つの動作をテストする必要があります。これは、テストが失敗したときに何が失敗したかをすぐに確認でき、それを修正することで、将来別の時点でテストが再び失敗することはないため、うまく機能します。

これは Rails の単体テストではうまく機能し、機能テストでも問題なく使用しています。しかし、統合テストに関して言えば、テストに多くのアサーションを含める必要があることは、やや暗示的です。それとは別に、彼らは通常、機能テストと単体テストで一度行われたテストを繰り返します。

では、これら 2 つの要素で統合テストを作成する際に推奨されるプラクティスは次のとおりです。

  1. 統合テストの長さ: 統合テストを 2 つに分割する必要がある場合の測定方法は? リクエスト数?または大きい方が常に良い
  2. 統合テストのアサーションの数: システムの現在の状態に関する単体テストと機能テストで提示されるアサーションを毎回繰り返す必要がありますか、それとも、正しい出力が生成されたかどうかをテストするために最後に 5 つほどのアサーションのみを使用する必要がありますか?
4

2 に答える 2

2

誰かがより信頼できる回答を提供してくれることを願っていますが、私の理解では、統合テストは特定の機能を中心に構築する必要があります。たとえば、オンライン ストアでは、カートにアイテムを追加できることを確認する統合テストと、チェックアウトできることを確認する別の統合テストを作成できます。

統合テストの所要時間は?

機能をカバーするのにかかる限り、それ以上は必要ありません。小さいフィーチャーも大きいフィーチャーもあり、そのサイズは好みの問題です。それらが大きすぎると、いくつかの論理的なサブ機能に簡単に分解できます。小さすぎると、統合テストはビューまたはコントローラーのテストのように見えます。

アサーションはいくつ必要ですか?

有用性を保ちながら、できるだけ少なくします。これはすべてのテストに当てはまりますが、統合テストは非常に遅いため、二重になります。これは、最も重要なものだけをテストし、他のデータによって暗示されるものをテストしないようにすることを意味します。チェックアウト機能の場合、注文が適切な人のために作成され、適切な合計があると主張するかもしれませんが、正確なアイテムはテストしないでおきます (私のアーキテクチャがアイテムから合計を生成する可能性があるため)。このフィールドに入力し、そのボタンをクリックし、このモーダルが開くのを待ってアプリケーションをトラバースすることで、テストする必要のあるすべての統合動作がカバーされ、他のすべての動作がカバーされるため、必要のないアサーションはその前に行いません。テストする必要がある場合は、ビュー テストでカバーされます。

全体として、これは一般に、単体テストは数行の長さで、より大きなセットアップ ブロックが先行する傾向があるのに対し、Rails 統合テストは数十行以上の長さになる傾向があり (そのほとんどは相互作用です)、完全にブロックをセットアップします。

于 2013-05-01T14:45:34.967 に答える