[解決済み] Springでテスト前にデータベースを再作成するには?
質問
私のSpring-Boot-Mvc-Webアプリケーションには、以下のデータベース構成があります。
application.properties
ファイルにあります。
spring.datasource.url=jdbc:h2:tcp://localhost/~/pdk
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
私が作った設定はこれだけです。他の設定は一切していません。とはいえ、Springとサブシステムは、Webアプリケーションの実行ごとに自動的にデータベースを再作成します。データベースは、アプリケーション終了後にデータがある間は、システム実行時に再作成されます。
私はこのデフォルトを理解していなかったので、これはテストに適していると期待していました。
しかし、テストを実行し始めると、データベースが一度だけ再作成されることがわかりました。テストは事前に定義された順序で実行されないので、これは全く意味がありません。
そこで質問です。 はどのように意味をなすのでしょうか?すなわち アプリケーションの初回起動時に発生するように、各テストの前にデータベースを再作成する方法?
私のテストクラスのヘッダーは次のとおりです。
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = myapp.class)
//@WebAppConfiguration
@WebIntegrationTest
@DirtiesContext
public class WebControllersTest {
ご覧のように、私は
@DirtiesContext
をクラスレベルで試してみましたが、役に立ちませんでした。
UPDATE
私はビーン
@Service
public class DatabaseService implements InitializingBean {
というメソッドを持っていて
@Override
@Transactional()
public void afterPropertiesSet() throws Exception {
log.info("Bootstrapping data...");
User user = createRootUser();
if(populateDemo) {
populateDemos();
}
log.info("...Bootstrapping completed");
}
ここで、私はそれを
populateDemos()
メソッドでデータベースからすべてのデータをクリアするようにしました。残念ながら、このメソッドは
@DirtiesContext
. なぜでしょうか?
どのように解決するのですか?
実は、こんなことがしたいのでは?
@DirtiesContext(classMode = ClassMode.BEFORE_EACH_TEST_METHOD)
<ブロッククオート
DirtiesContextは同じクラス内でクラスレベルおよびメソッドレベルのアノテーションとして使用することができます。 アノテーションとして使用することができます。そのようなシナリオでは ApplicationContext は、そのようなアノテーションを付けたメソッドの後でも、クラス全体の後でも、ダーティとしてマークされます。 メソッドの後、およびクラス全体の後にダーティとしてマークされます。もし DirtiesContext.ClassMode が AFTER_EACH_TEST_METHOD に設定されている場合、コンテキストは、クラス内の各テストメソッドの後にダーティとマークされます。 はクラス内の各テストメソッドの後にダーティとマークされます。
Testクラスに貼るんですね。
関連
-
コンストラクタDate()が未定義である問題
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] Mavenを使用して、依存関係を持つ実行可能なJARを作成するにはどうすればよいですか?
-
[解決済み] ファイルの内容からJavaの文字列を作成するにはどうすればよいですか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] ファイルを作成し、書き込むにはどうすればよいですか?
-
[解決済み] Spring Bootアプリケーションにポートを設定する方法
-
[解決済み] Springのオートワイヤリングの仕組みは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
実行中にEclipseがポップアップする A Java Exception has occurred
-
アクセス制限です。タイプ 'JPEGCodec' は API ではない ☞My Blog Github ☜ ホームページを見る
-
メモ帳でJavaプログラムをコンパイルして実行すると、Could not find or load main class ...というエラーが表示される。解決方法
-
Solve モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory エラー
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
セミコロン期待値エラー解決
-
アノテーション「@Retention」の役割
-
Java appears タイプEを囲むインスタンスがアクセスできない。
-
XXX型を囲むインスタンスがJavaでアクセスできない
-
テストが空であるかどうかを判断するためのオプションの処理