Spring Container に簡単なテストがあります。
public class JpaCategoryRepositoryTest extends AbstractJpaJavaTestBase {
@Inject
private CategoryService categoryService;
@Test
public void testStoreCategory(){
final Category category = new CategoryBuilder()
.name("Test category")
.build();
assertEquals("Cateogory ID is not assigned", 0L, category.getId());
categoryService.storeCategory(category);
assertNotEquals("Category ID is persistent", 0L, category.getId());
}
}
はassertNotEquals
失敗します。トランザクションはまだコミットされていないと思いました。OK、トランザクション管理を追加してテストを更新しました。
public class JpaCategoryRepositoryTest extends AbstractJpaJavaTestBase {
@Inject
private CategoryService categoryService;
@Inject
TransactionTemplate transactionTemplate;
@Test
public void testStoreCategory(){
final Category category = new CategoryBuilder()
.name("Test category")
.build();
assertEquals("Cateogory ID is not assigned", 0L, category.getId());
transactionTemplate.execute(new TransactionCallback<Void>() {
@Override
public Void doInTransaction(TransactionStatus status) {
categoryService.storeCategory(category);
return null;
}
});
assertNotEquals("Category ID is persistent", 0L, category.getId());
}
}
しかし、それは役に立ちませんでした。統合テスト中にエンティティが保存されたことをテストするための最適なパターンは何ですか? テストが失敗した後にテーブルを確認すると、実際のエンティティが保存されます。