1

こんにちは、私は現在、いくつかの極端なプログラミングを調査しており、可能な限りそれに固執しようとしています。つまり、イテレーションを開始したら (もちろん、リリースを計画した後)、ユーザー ストーリー (今では予想外に分厚いスタック) を受け入れテストに変える必要があります。

使用する実装言語については完全にはわかりませんが、これは、Web サーバーによって提供されるデータベース バックエンドを備えた動的 Web アプリケーションになると確信しています。現時点では、ローカル テスト環境を備えたローカル マシンで最初のリリースを開発する予定です。そのため、受け入れテストではセキュリティは問題にならないと想定できます (したがって、受け入れテストにテスト データベースへのルート アクセス権を与えることができます)。関与しているなど)。使用する受け入れテスト フレームワークについてはまだ少し確信が持てませんが、これは Web アプリケーションになるので、テストを作成して実行するために Selenium RC を使用すると思います (誰かがより良いものに私を向けることができます:))。

ただし、まだ暗い領域が残っています。新しい新しいアプリケーションを実装しているため、このアプリケーションのデータはまだありません。したがって、テスト データベースを取得するために現在の実稼働データベースのスナップショットを取得することはできません。さらに、アプリケーションは (データベース バックエンドを備えた Web アプリケーションと同様に) ステートフルであるため、すべての受け入れテストに 1 つのデータベースを使用することになります。テストの分離に関して醜い問題を引き起こす可能性があります (少なくとも単体テストの場合、「これは非常に楽しく、多くの白髪が発生する可能性があります」と表示されます)。

それで、どうすればこの問題を解決できますか?人為的なテスト データベースを作成し (データベース スキーマが変更されるたびに維持し)、テストを実行する前に各受け入れテストが適切なデータベース状態をテスト データベースにロードするように受け入れテストを記述しますか? (多数のアクセント テストを実行する場合、10 ダースのレコードを 100 回ロードするのはどれくらい速いか遅いでしょうか?) サンプル データベースを 1 つ作成し、すべてのテストでこれをロードして、最善を期待する必要がありますか? 受け入れテストで常に必要なテスト データを再作成する必要がありますか? または、人々はどのようにこれを行うのですか?

4

1 に答える 1

0

さらなる調査によると、これを行う適切な方法は、適切なセットアップ方法を使用してデータベースを定義済みの状態にすることです。これには、テーブル内の既存のデータをすべて削除し、特定のデータのテスト セットをテーブルに追加してから、正確にこのデータでテストを実行することが含まれます。その後、teardown-method は、テーブルに対して行われたことをすべてクリアします (setUp がすべてを削除するか、teardown がすべてを再び削除します)。このプロセスを簡素化する dbUnit などのツールがあります。これにより、テスト速度がいくらか低下しますが、テストの完全な分離が確立されます。これは良いことです。なぜなら、緑は単に緑を意味し、赤は単に赤を意味し、「テスト実行の現在の順序を考えると、これは機能します。 "。

それに加えて、速度の問題はおそらくそれほど重要ではありません.終わったと思った時の背景。

于 2009-12-26T17:24:07.433 に答える