私は自分のアプリケーションのテストを開発しようとしています(私は非常に遅いテストについて知りました...)。私は多くの例を探検し、彼らの誰も私を満足させず、率直に私を少し混乱させてしまった。Spring Hibernate H2 Junit testing - 起動時にスキーマをロードする方法
私が達成しようとしているのは、テストの開始時(既存のMySQLスキーマからのダンプファイル)にimport.sqlをロードし、H2データベースにロードすることです。ここで
が休止状態の設定ファイルである:
org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata INFO:
@Configuration @EnableTransactionManagement @ComponentScan({ "kamienica.feature" }) public class HibernateTestConfiguration { @Autowired ApplicationContext applicationContext; @Bean public LocalSessionFactoryBean sessionFactory() { LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); sessionFactory.setPackagesToScan(new String[] { "kamienica" }); sessionFactory.setHibernateProperties(hibernateProperties()); return sessionFactory; } @Bean(name = "dataSource") public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("org.h2.Driver"); dataSource.setUrl("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;" + "INIT=CREATE SCHEMA IF NOT EXISTS kamienica;DB_CLOSE_ON_EXIT=FALSE"); dataSource.setUsername("sa"); dataSource.setPassword(""); return dataSource; } private Properties hibernateProperties() { Properties properties = new Properties(); properties.put("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); properties.put("hibernate.hbm2ddl.auto", "update"); // this is where I tried to load script the first time: // properties.put("hibernate.hbm2ddl.import_files", "kamienica.sql"); return properties; } @Bean @Autowired public HibernateTransactionManager transactionManager(SessionFactory s) { HibernateTransactionManager txManager = new HibernateTransactionManager(); txManager.setSessionFactory(s); return txManager; } }
毎回私はメッセージを取得テストを開始しますHHH000262:テーブルが見つかりませんでした:アパート
空白
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { HibernateTestConfiguration.class })
public class BaseTest {
private EmbeddedDatabase db;
@Autowired
private SessionFactory sessionFactory;
//second attempt to load sql file
@Before
public void setUp() throws Exception {
db = new EmbeddedDatabaseBuilder().addScript("import.sql").build();
}
@After
public void tearDown() throws Exception {
SessionHolder sessionHolder = (SessionHolder) TransactionSynchronizationManager.unbindResource(sessionFactory);
SessionFactoryUtils.closeSession(sessionHolder.getSession());
}
}
:何
を取得しようと、私はすべての私のテストクラスを拡張するために計画されているSQL(休止プロパティを経由して)休止状態の設定では、ファイルだけでなく、スーパークラスでのロードしようとした値SQLファイルをロードして、H2データベースを準備してテストを実行するにはどうしたらいいですか?
、私はこれがあなたのためにやり過ぎであるかどうか知らないが、CI/CDのような状況で、あなたはあなたのためにあなたのDBスキーマを管理するために、フライウェイのようなものを使用したいですそれはテストDBのために構築することは完全に満足しています。 – chrylis