コンテキストは次のとおりです。データベースに多くのレガシー コードを含む MVC Web アプリケーションがあります。(このコードをサーバー側に移行することは許可されていません) 永続ストアには、リポジトリパターンを使用します。
私たちのクライアントはアプリケーションに新しい機能を追加したいと考えているので、サーバー側にすべての新しいビジネス ロジックを追加したことは明らかです。
私たちが現在抱えている問題は、毎日実行速度が遅くなる機能テスト スイートに関するものです。
主な理由は、セレンを使用してブラウザーからデータベースへのテストを実行しているためです (エンドツーエンド)。
人々が次の他の戦略を使用して成功しているかどうかを知りたいです:
1. UI を取り除く
ブラウザーや Web サーバーを経由する代わりに、コントローラー レベルでテストを実行します。UI によるテストの損失を補うために、javascript 単体テストまたは MVC Views 単体テストを記述します。
2. DB を取り除く
アプリケーションがメモリ内で完全に実行できるように、レポジトリの「InMemory」バージョンを作成します。これにより、テスト スイートも高速化されます。これを補うために、データベース リポジトリの統合テストを作成します。
1+2 の両方の戦略を実行すると、実行速度が最大になると思います。本当に重要なもの (コントローラー、ビジネス レイヤー、ドメイン エンティティ、さまざまなヘルパーが統合されたもの) をテストします (UI と DB は「詳細」と見なします)。 」)。
さて、問題は、実際にはDBには多くのレガシーコードがあるため、そのようなものの統合テストに頼り、DBを機能テストスイートから除外するだけで安全かどうかわからないことです. とにかくスイートのままにしておくべきですか?それとも大丈夫ですか?
どんな経験や提案も大歓迎です!
私の調査結果のいくつかは次のとおりです。
- 継続的デリバリーの本は、これらのテストは遅くても常にエンド ツー エンドであるべきだと示唆しています (ただし、誰もがそれに同意するわけではないとも述べています)。
- 私の理解では、ボブおじさんは 1+2 戦略に同意するでしょうが、レガシー コードを含むデータベースでそう考えるかどうかはわかりません。