オレグの答えは素晴らしいですが、私は両方を使用している人の視点を提供させてください。
フィクスチャはしばらくの間、Railsコミュニティの鞭打った少年でした。誰もが備品の欠点を理解していますが、誰も彼らの強みに本当に挑戦しているわけではありません。私の経験では、工場自体が簡単にフィクスチャと同じように維持するのが難しくなります(実際はスキーマに依存しますが、私は逃げ出します)。工場の本当の強みは、治具ベースの痛みの選択的な交換です。カップルの特質について話しましょう。
最初の問題はパフォーマンスです。ほとんどのアプリケーションで、データベースにぶつかることなく大部分のテストをすることができますが、大部分のアプリケーションでは、データベース全体にぶつかることなくテストすることは賢明ではないと思います。ある時点で、スタック全体をテストする必要があります。あなたが模倣したり、スタブするたびに、微妙なバグを含んでいる可能性のあるインターフェースについて推測しています。したがって、かなりの割合のテストでデータベースにヒットする必要があると仮定すると、トランザクションフィクスチャ(はです)は、すべてのテストで環境全体をインスタンス化するよりはるかに高速です。
私は、テストスイートのサイズは、実際にはContinuous Integrationを探して次のレベルに発展させる必要があると言います。どんなに高速化しても、開発者が待つのはまだまだ長い時間です。多分autotestを見て、個々のレベルで助けてください。しかし、最終的にCIは、開発者の敏捷性を犠牲にすることなくテスト規律を維持することを可能にします。
フィクスチャが本当に輝く場所は機能/統合テストです。私が見ているところでは、フィクスチャはテストされるべきアプリケーションの健全な基本状態を設定する必要があるということです。ほとんどの単体テストではこれが本当に必要ではありません。あなたは工場を使って非常に良い単位カバレッジを得ることができます。しかし、機能テストでは、任意のページが数十のモデルに当たる可能性があります。私は各テストですべてのことを設定したくありません。より複雑なシナリオを構築するにあたり、グローバルデータ状態を再現することに近づいています。正確には最初に実行するように設計されたものです。
他のすべてが平等であると私は考えていますが、私は20ユニットテスト(Railsの使い方を使用)の1つの機能テストを好むと思います。どうして?機能テストは、ユーザーに送信される最終結果が正しいことを証明するためです。単体テストは機能のニュアンスを得るのに最適ですが、一日の終わりには、サイト全体を破壊するインターフェースにバグが残る可能性があります。機能テストは、私のブラウザで実際にページを読み込まずにデプロイするという確信を私に与えるものです。私はすべてをスタブして両方のインターフェースをテストして同じカバレッジを得ることができると知っていますが、小さなCPUを犠牲にして1つの単純なテストでスタック全体をテストできるなら、
それでは、フィクスチャのベストプラクティスは何ですか?多くのモデルとコントローラを横断する主要な新機能を追加する場合、データ
の最も広いカテゴリーをカバーするために、すべてのモデルの一握りを設定
- 、主要な状態に
- 回避を表現するためにいくつかの新しい器具を追加唯一のいくつかのテストのために必要とされるテストページ付けまたは他の質量を作成するためのより小さな/より局所的な変動を除去/フィールドを
- 使用工場
- 使用工場を添加した以外は、古い器具を編集
また、私はJay Fields' blogを本当に良い実用的なテストアドバイスにお勧めします。私がジェイのブログについて最も気に入っていることは、テストはプロジェクト特有のものであることを常に認めており、あるプロジェクトではうまくいくものが別のプロジェクトでは必ずしも機能しないということです。彼はドグマについては短く、プラグマティズムでは長い。
出典
2009-04-20 18:30:56
gtd