私は多くの単体テストがあり、それぞれがデータベースを「デフォルト」状態にする必要があるWebサイトで作業しています。テストごとにデータベースを破棄し、SQLスクリプトを使用してデフォルトの状態をロードしていることを知っておいてください。そして、それは非常に遅いです。そのため、各テストの開始時に、そのデフォルト状態を保存してデータベースを復元できれば便利だと思いました。これは可能ですか?そうでない場合、なぜ私はプロセスを加速するために行うことができますか?データベース全体を削除して再作成することを知っています。行だけを削除した場合、パフォーマンスは向上しませんか?
1663 次
2 に答える
3
すべてのテストの前にデータベースをデフォルト状態に設定してから、各テストをトランザクションでラップすることができます。テストが終了したら、トランザクションをロールバックするだけです。
このアプローチは、共有状態に依存しないため、テストを同時に実行する場合に特に適しています。
ただし、適合しないユースケースがあります。たとえば、統合テストの一般的なケースである、テストシナリオに関係するデータベースにアクセスする複数のプロセスがある場合。
このような状況の実際の例:テストランナー(プロセス#1)がデータベースにデータを設定し、ファントムがバックグラウンドで実行されてアプリサーバーにリクエストを送信します(プロセス#2)。テストランナーとアプリサーバーの両方が単一のデータベーストランザクションを共有することはできません。
于 2012-07-24T09:16:23.930 に答える
1
現在のテーブルを一時的なテーブルの後ろに隠すことができます。
CREATE TEMPORARY TABLE foo PRIMARY KEY (a), UNIQUE KEY (b), FOREIGN KEY (c) REFERENCES bar (c) SELECT a, b, c FROM foo
接続が切断されると、一時テーブルは破棄されます(したがって、元の影響を受けていないテーブルのみが残ります)。
依存性注入を使用して、データベースをシミュレートしたり、テストデータベースに接続したり、その他の必要な初期化(上記の一時テーブルの作成など)を実行したりします。
于 2012-07-24T09:15:35.670 に答える