2017-08-14 19 views
0

私は春のブートプロジェクトを持っており、そのためのテストを書いています。私はh2データベースを使用しています。私ApplicationTestsは、これらのアノテーションがありますSpringテスト@SqlはSQLファイルからデータを挿入しません

@RunWith(SpringRunner.class) 
@SpringBootTest 
@Sql(scripts = { "classpath:db/data.sql" }, config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED)) 
@ActiveProfiles("test") 

私はそれで不正なSQL文を置けばdata.sqlに内のデータがdata.sqlには、上で実行されるようにテストを開始するとき、私はエラーを取得するために挿入されていることを知っていますh2データベース。私のdata.sqlは次のようになります:

INSERT INTO language VALUES (1, 'English'); 

私の最初のテストが始まると、私は言語表のレコードを数えますが、何もありません。 data.sql内のデータがコミットされていないか、またはバネがロールバックを行っていて、h2データベースにデータが存在せず、テスト中にアクセスできないという意味です。誰が何が起こっているかの手掛かりを持っていますか?

答えて

0

本当にh2データベースに書き込んでいますか?

アプリケーションでデータソースBeanをどのように定義しましたか?例..あなたのアプリケーションにmysql dbを使用していて、h2データベースを使ってテストしていて、テストクラスに明示的にh2データベースを使用していないと、あなたのアプリケーション用に定義したmysql db )

以下のコードを試してみてください。テスト用に使用しているh2データベースを置き換えることはできません。

@AutoConfigureTestDatabase(replace = Replace.NONE) 
+0

これは機能しませんでした。私が行ったことは、spring.datasource.urlプロパティをオーバーライドすることで、テストが開始され、アプリケーションが起動し、h2接続文字列が使用されていることがわかります。私は何かに気づいた。 私はflywayを使用していますが、アプリケーションが起動したときにsqlファイルがh2データベースで実行されることが確認されていますが、Daoテストが開始されると、flywayのsqlファイルがエラーなく実行されます。 h2データベースが空になっているか、またはflayway sqlファイルのinitializyがデータベースに保存されていないかのように見えます。 –

+0

私のログを見ると、原因がわかりました。私は私のコンソールにDROP TABLEの行を見て、それは春/休止状態がテーブルを削除しているようだ。行hbm2ddlスキーマのエクスポートを実行し、ドロップステートメントの多くを参照してください。 私はhbm2ddlを無効にしようとしましたが、何も動作しないようです。だから、もしあなたがこの問題を抱えているならば、それは春またはHibernateが、データベース構造を落とすためのデフォルトオプションを設定することは賢明だと考えなければなりません。 –

関連する問題