数年のコーディングとプロジェクトの作業の後、私は自分の質問に対する答えを提供します。
はい、ユニットテストを作成する必要があります。エンドツーエンドのテストは、特にUIコンポーネントに依存している場合、作成が難しく、脆弱です。
DjangoやRails(または独自のカスタムクラス)のようなフレームワークを使用している場合、フォームの検証を処理するフォームクラスが必要です。レンダリングされたテンプレートとフォームを表示し、GETおよびPOSTリクエストを処理するビュークラスもあります。
エンドツーエンドのテストでは、次のことを行います。
- URLを取得
- 有効なデータをフォームに入力します
- フォームをURLに投稿する
- データベースが更新されたか、有効なフォームの結果として何らかのアクションが実行されたことを確認してください
あなたは多くのコードをテストしており、カバレッジはかなり良いものになりますが、すべてがうまくいったときのみ幸せなパスをテストしています。フォームに正しい検証があることをどのように確認しますか?そのフォームが複数のページで使用されている場合はどうなりますか?さらに別のエンドツーエンドテストを作成しますか?
単体テストでこれをもう一度試してみましょう。
- ビューのGETメソッドをテストする
- 偽/模擬フォームでビューPOSTメソッドをテストする
- 有効なデータでフォームをテストする
- 無効なデータでフォームをテストする
- フォームの副作用をテストする
単体テストを使用することで、より小さなコードをテストすることができ、テストは具体的で簡単に記述できます。これをTDD(テスト駆動開発)と組み合わせると、より高品質のコードを取得できます。
自動テストのないプロジェクトにいるときは、どこからでも始めなければならないので、単体テストの作成のしやすさを無視すべきではありません。単体テストから開始する方が簡単かつ迅速であり、幸せな道だけでなく、バグのテストをすぐに開始できます。
was told by a co-worker that the reason for this is that we can rip out and change the underlying implementation at any point as long as the end-to-end tests pass.
-それは単体テストにも当てはまります。エンドツーエンドテストは、単体テストを記述しない口実として使用されているように思えます。