我試圖爲我的應用程序開發測試(我發現了非常晚的測試...),我被卡住了,基本配置。我已經通過很多例子搜索,沒有一個人滿意我,並坦率地讓我有點困惑。春季休眠H2 Junit測試 - 如何加載架構開始
我想要實現的是加載import.sql開始測試(這是從現有的MySQL模式轉儲文件)並將其加載到H2數據庫中。
這裏是hibernate的配置文件:
@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;
}
}
每次我開始測試時,我得到一個消息:
org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata信息: HHH000262:表未找到:公寓
而且我得到空/ null試圖在超這我所有的測試類計劃延伸到獲取任何
我試圖加載在Hibernate的配置(通過Hibernate屬性)的SQL文件,以及當值:
@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文件並準備H2數據庫來執行測試?
我不知道這是否是矯枉過正你,但在CI/CD情況下你會使用類似遷飛來管理你的數據庫模式爲你,並且非常樂意爲測試數據庫構建它。 – chrylis