2

データベースにクエリを実行し、データを返すメソッドを単体テストするにはどうすればよいですか? 他の状況では、オブジェクトをモックすることができますが、この場合、オブジェクトが正しいデータを返すかどうかをテストしたいのですが、db から分離してチェックするにはどうすればよいですか? ある種の特別なデータベースを使用する必要がありますか? しかし、その新しいデータベースを、それらすべての列を持つ他のデータベースと同じように機能させるにはどうすればよいでしょうか?

ありがとう。

更新: みんなのおかげで、彼らの反応が私を正しい道へと導いてくれました。最後にデブリーを使いました。そのために新しいpersistence.xmlを追加しました。他に大きな変化はなく、現在は機能しているようです。

4

3 に答える 3

3

私が大成功を収めて使用したアプローチの1つは、次の方法を使用することです。

  1. プロジェクトをビルドするMaven
  2. データベーススキーマを管理し、バージョン管理するLiquibase (またはFlyway)
  3. テストとともに開始されるインメモリデータベースとしてのH2 。

上記のいずれも使用していない場合は、そこで学ぶことがかなりありますが、私の経験では、それだけの価値がありました。これはSpringアプリケーションで非常にうまく機能しました。他の設定では、マイレージが異なる場合があります。

Mavenは、テストを実行する前に、メモリ内のH2データベースのインスタンスを開始する必要があります。Springアプリケーションでは、H2 JDBC URLを使用してデータソースを指定するだけで、自動的に起動します。

Liquibaseを使用して一連のXMLスクリプトを実行し、データベーススキーマを設定してから、別のファイルにテストデータを入力できます(Liquibaseの実行時に別のファイルを指定するか、contextそれぞれの属性を使用しますchangeSet)。これは、Mavenを使用するか、特定のLiquibaseBeanを使用してSpringで実行できます。

そこから、通常のアプリであるかのようにアプリケーションをテストできます。モックする必要はなく、結果としてはるかに有用なテストを取得できます。スキーマを変更するか、H2とネイティブRDBMS間のSQLの違いを回避する必要がある場合があります。

余談ですが、私はこの種のテストに大いに賛成です。私の経験では、すべてをモックすることは実際には興味深い洞察を得ることができず、ビルド内統合テストが不可能な場合の最後の手段になるはずです。しかし、私に反対する人はたくさんいます!

于 2012-07-16T17:05:48.330 に答える
1

DBUnitを使用できます。現在のスキーマを使用して、データを簡単にモックできます。

于 2012-07-16T17:18:20.443 に答える
1

問題は、単体テストに必要な動作は何ですか? データベースをモックアウトした場合は、すべての重要なロジックをテストしたことになります。データベース アダプターが機能するかどうかは、実際のデータベースに対する統合/受け入れテストで確認できます。

于 2012-07-16T17:20:02.400 に答える