因为我没有大量 JPA 经验,所以我想编写一个自动化测试来确保我的 JPA 实体正在检索我希望它们检索的记录。我的计划是为我的测试启动一个内存中的 H2 DB,并对其执行一些简单的 CRUD 操作,确保数据按我的预期返回。
我不知道如何让 Spring Boot 创建内存数据库。这是我到目前为止所拥有的,但不起作用。
这是创建我的 JPA 存储库的配置。这是正确的应用程序代码,目前正在与我实际的 Oracle DB 一起使用。
@Configuration
@EnableJpaRepositories("com.name.project.webservice.dao")
@EntityScan("com.name.project.webservice.types")
public class JpaRepositoriesConfig {
// Intentionally empty.
}
我将此配置导入到我的测试中。
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {JpaRepositoriesConfig.class})
public class JpaEntityTest {
@Test
public void test(){}
}
然后,我编写一个特定于测试的属性文件 ,src/test/resources/application.properties用测试的 H2 配置替换应用程序的 Oracle 配置。
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
最后,我将 H2 jar 添加到我的 pom.xml 中。这个 jar 的存在以及我的测试中的注释应该指示 Spring Boot 根据我的属性文件启动 H2 数据库。
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
这个错误让我很惊讶。我认为Spring Boot应该自动给我一个entityManagerFactory;我的应用程序从不实例化一个entityManagerFactory bean,它工作得很好。
因此,如果您不介意告诉我,我是否至少走在正确配置的正确轨道上?我错过了哪一步导致了这个错误?我需要手动声明entityManagerFactory吗?
感谢您的帮助。
编辑:这是我的应用程序属性文件的相关部分,而不是上面记录的测试属性文件。
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url= <<database-url>>
spring.datasource.tomcat.max-active=5
spring.datasource.tomcat.initial-size=1
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-idle=1
蝴蝶刀刀
森栏
相关分类