我一直在编写一些使用内存(H2)数据库的集成测试,但我一直被这个错误所困扰。
原因:组织。h2.jdbc。JdbcSQLException:未找到表“TESTTABLE”;SQL语句:
问题是,在生产中,Hibernate正在将表名和列名从骆驼大小写更改为下划线。(TestTable-
下面是我的测试配置类:
@Configuration
@EnableJpaRepositories(basePackageClasses = {
TestTableRepository.class
})
public class InMemoryDataConfig {
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addDefaultScripts()
.build();
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPackagesToScan(new String[]{"org.test.domain.entity"});
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(buildHibernateProperties());
return em;
}
protected Properties buildHibernateProperties() {
Properties hibernateProperties = new Properties();
hibernateProperties.setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
hibernateProperties.setProperty("hibernate.show_sql", "true");
hibernateProperties.setProperty("hibernate.use_sql_comments", "true");
hibernateProperties.setProperty("hibernate.format_sql", "true");
return hibernateProperties;
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}
@Bean
public TestService testService() {
return new TestService();
}
}
我宁愿不必注释所有内容,这样测试就可以知道名称是什么。
对此有什么想法或建议吗?感谢您的任何帮助!
这并没有完全回答我提出的具体问题,但我能够以一种更简单的方式让它工作。如果你把我在原始问题中发布的所有内容都删掉,你只需要做几件事。
首先,必须包含依赖项。我正在使用gradle,所以我添加了以下内容:
testCompile("com.h2database:h2:1.4.191")
接下来,将这些注释添加到测试中:
@RunWith(SpringRunner.class)
@SpringBootTest
public class MultifamilyIntegrationTest {
@Autowired
protected TestService testService;
@Test
public void test() {
testService.getUsers();
}
}
最后,您必须在 /src/test/resources文件夹中包含data.sql和schema.sql文件。
schema.sql文件是所有与模式相关的创建脚本。
数据。sql文件用于插入所有需要的数据。
我有一个在mySQL上运行的小型数据库应用程序。 我想使用H2进行测试。 我向build.gradle添加了必要的依赖项: runtimeOnly’com。h2数据库:h2' 然而,我注意到,在完成测试之后,我的mySQL数据库包含测试期间生成的字段,就好像spring没有使用H2一样。 有什么问题吗?
我正在开发一个使用MongoDB数据库的程序,但我在问,当通过Java执行SQL时,是否可以使用内部数据库进行测试,比如H2?
问题内容: 是否有人对从集成测试框架(如Selenium)进行的回滚数据库事务的最佳实践或首选方式有任何建议? 这是当前的情况:我们有一个.net Web项目,其中包含许多在单元测试环境中可以正常工作的单元测试- 每个测试都继承一个父类,该父类在[SetUp]中打开一个事务,并在其中回滚该事务。 [TearDown]。每次测试后,我们的单元测试数据库都恢复到原始状态。 但是,一旦进入集成环境,情况
我试图用H2测试我的JPA原生@查询。我的原生查询如下: 在编写单元测试时,我得到以下H2错误: 原因:org.h2.jdbc.jdbcsqlexception:找不到表“accounts”;SQL语句:从'aws_account_name'喜欢LOWER(CONCAT(“%”,COALESCE(?,“”),“%”))限制的帐户中选择*?[42102-197] 我可以通过更改SQL语法将表名置于双
我有一组Junit测试用例。所有测试用例都必须针对不同的数据库环境执行。在junit测试中使用“@RunWith(SpringJUnit4ClassRunner.class)”时,Spring Boot应用程序只启动一次。但我需要用不同的配置重新启动应用程序,包括flyway迁移和其他与环境相关的应用程序-
当我运行命令gradle war integrationTest时,集成测试失败,因为它在服务项目中找不到上下文侦听器。错误消息的片段如下: 对此我们非常感谢您的帮助。提前致谢