JDBC 関連のメソッドをテストする最良の方法は何ですか? ユーザーの追加、ユーザーの禁止など。
(JUnitを使用)
すべての void メソッドをブール値に設定し、動作した場合は true を返し、動作しなかった場合は false を返し、JUnit テストでそれらの値を適宜アサートする必要がありますか?
これは、ベスト プラクティスを見つけるための一般的な質問です。
ありがとうございました!
個人的には、これに最適なツールはMockitoです。JDBC の戻り値を模倣して、特定のクエリとパラメーターを指定すると、特定の値が返されると言うことができます。
単体テストで動作するようにコードを変更する必要はありません。本番環境とテストの両方でまったく同じように動作するはずです。
また、Derby などのメモリー内データベースを使用し、テスト段階の開始時に値をロードして、そこに存在する値を把握することを検討することもできます。実行時間に関しては、モッキングの方がおそらく高速です。
このようなテストを作成するときは、(メモリ内データベースではなく) 実行する実際のデータベースにアタッチします。私のコードの多くは、Derby などで必ずしもサポートされていないストアド プロシージャやその他のデータベース固有の機能を使用しています。
これらが単体テストなのか統合テストなのか、私にはわかりません。しかし、それらは重要なので、継続的インテグレーション サイクルに組み込むことを好みます。
永続的なデータベースを使用する場合は、いくつかの追加の心配事項があります。テストを実行する前にデータの状態を知る必要があり、各テストの実行時にデータを既知の状態に戻すためにできる限りのことを行う必要があります。これを行わないと、テストが互いに独立しなくなり、スイートの後半にあるテストが以前のテストの失敗により失敗し始めることがわかります。