私は次の注釈を結合しようとしています:
org.springframework.test.context.jdbc.Sqlおよびorg.junit.Before
次のコードのように:
@Test
@Sql(scripts = "dml-parametro.sql")
public void testData(){
Iterable<Parametro> parametros = parametroService.findAll();
List<Parametro> parametrosList = Lists.newArrayList(parametros);
Assert.assertThat(parametrosList.size(), Is.is(1));
}
@Before
public void beforeMethod() {
JdbcTestUtils.deleteFromTables(jdbcTemplate, "PARAMETRO");
}
メソッド@Beforeのコードは、@ Sqlアノテーションのスクリプト「dml-parametro.sql」の後に実行されます。
これを行うのは正しいですか?
これを解決するために、@ Beforeよりも@Afterを使用していますが、テストの実行前ではなく、実行前にテーブルを削除したいと思います。
@SqlConfigを使用したくありません。私はテストレベルでtransacionalスコープを使用していないので、すべてのテストメソッドでテーブルをクリーンアップする必要があります。すべてのテストメソッドがテーブルをクリーンアップする必要がある場合、@ Beforeメソッドでこれを実行したいと思います。 @SqlConfigを使用してすべてのテストメソッドでこれを実行するのは嫌です。 @Beforeより前に実行される@Sqlの動作は間違っていると思います。
デフォルトでは、@Sql
を介して実行されるSQLスクリプトはすべて実行されますbefore any @Before
メソッド。そのため、発生している動作は正しいですが、@Sql
のexecutionPhase
属性を使用して実行フェーズを変更できます(以下の例を参照)。
複数のスクリプトを実行する場合は、@Sql
を使用しても可能です。
したがって、PARAMETRO
テーブルから削除するclean-parametro.sql
という名前のクリーンアップスクリプトがある場合は、(@Before
メソッドでJdbcTestUtils.deleteFromTables()
を呼び出す代わりに)次のようにテストメソッドに注釈を付けることができます。
@Test
@Sql({"dml-parametro.sql", "clean-parametro.sql"})
public void test() { /* ... */ }
もちろん、dml-parametro.sql
がPARAMETRO
テーブルに値を挿入する場合、クリーンアップスクリプトでそれらの値をすぐに削除することは意味がありません。
@Sql
および@SqlConfig
は、スクリプト実行の複数レベルの構成を提供することに注意してください。
たとえば、テストの前にテーブルを作成し、テスト後にクリーンアップする場合、Java 8:
@Test
@Sql("create-tables.sql")
@Sql(scripts = "clean-up.sql", executionPhase = AFTER_TEST_METHOD)
public void test() { /* ... */ }
または、Java 6またはJava 7:でコンテナとして@SqlGroup
を使用します。
@Test
@SqlGroup({
@Sql("create-tables.sql"),
@Sql(scripts = "clean-up.sql", executionPhase = AFTER_TEST_METHOD)
})
public void test() { /* ... */ }
テストが@Transactional
であり、コミットされたデータベースの状態をクリーンアップする場合、次のような新しいトランザクションでクリーンアップSQLスクリプトを実行するようにSpringに指示できます。
@Test
@Sql("insert-test-data.sql")
@Sql(
scripts = "clean-up.sql",
executionPhase = AFTER_TEST_METHOD,
config = @SqlConfig(transactionMode = ISOLATED)
)
public void test() { /* ... */ }
これがあなたにとって物事を明確にすることを願っています!
乾杯、
サム(Spring TestContext Frameworkの作成者)
ノート:
AFTER_TEST_METHOD
はExecutionPhase
から静的にインポートされますISOLATED
はTransactionMode
から静的にインポートされます