9

単体テストを始めたばかりで、データベースとのやり取りが原因で多くのテスト ケースを実行する簡単な方法がわかりません。

テストをアサートするためにデータベース アクセス (読み取りと書き込み) が必要な単体テストの標準的な方法/プロセスはありますか?

これまでのところ、別のデータベース接続を使用してアプリをブートストラップするために構成ファイルを使用し、起動メソッドを使用してライブ データベースをテスト用に分離して使用されるデータベースにコピーすることをお勧めします。

私は近いですか?または、これに対するより良いアプローチはありますか?

4

2 に答える 2

14

ビジネス ロジックは、データベースと直接対話するべきではありません。代わりに、単体テストのコンテキストで偽造およびモックできるデータ アクセス レイヤーを通過する必要があります。モック フレームワークを調べて、モックを作成してください。テストはデータベースにまったく依存すべきではありません。代わりに、データ アクセス レイヤーから返されるデータを明示的に指定し、ビジネス ロジックがその情報を使用して正しく動作することを確認する必要があります。

プログラムが接続された DB で動作することをテストすることは、より統合テストであり、それらには多くのコストが伴います。それらは遅く (そのため、コンパイルするたびに実行するのが難しくなります)、より複雑です (そのため、保守により多くの時間と労力が必要になります)。より単純な単体テストを用意できる場合は、最初にそれを行うことをお勧めします。後で DB を使用する可能性のある統合テストを追加することもできますが、最初に単純な単体テストを追加することで最大の価値が得られます。

于 2012-05-26T20:55:55.760 に答える
4

単体テストに関する限り、実際に機能するものは何でも良いと思います。単体テストによって何らかの価値が得られ、システムの品質が向上し、システムを開発および保守する能力が向上することが重要です。

おそらく、ライブ データベースをテスト データベースにコピーしたくないことをお勧めします。単体テストを一貫して実行するための適切なデータがライブ データベースに含まれているという保証はおそらくありません。単体テストでは、コードが機能することをテストする必要があります。ライブ データベースに適切なデータが含まれていることをテストしてはなりません。これは、ライブ データベースがライブであるため、ユーザーが内容を変更してテストが失敗する可能性があるためです。 .

単体テストコード自体は、単体テストを作成するシナリオをシミュレートするために必要なデータをテストデータベースに入力する必要があります。数年前、Ruby on Rails コードをいじりました。そのためのテストフレームワークには、偽のデータでデータベースをセットアップするテストクラスがあり、クラスからの複数のテストメソッドがそのデータに対して実行されるように記述され、ティアダウンメソッドがデータベースからデータを消去します。したがって、さまざまなテスト クラス (またはフィクスチャと呼ばれることもあります) が特定のデータ セットアップに対して実行されます。つまり、実行するテスト ケースごとに作成するのではなく、同じデータ セットアップに対して多数のテストを実行できます。テストごとにデータを設定すると、テストの実行が遅くなり、テストが実行されるのを待つのに飽きて、気にするのをやめてしまう可能性があります。

于 2012-05-26T21:10:59.907 に答える