我试图为我的应用程序开发测试(我发现了非常晚的测试...),我被卡住了,基本配置。我已经通过很多例子搜索,没有一个人满意我,并坦率地让我有点困惑。春季休眠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