我在单元测试中使用了H2数据库,使用Java配置:
@Configuration @EnableJpaRepositories(basePackageClasses = AdvertisementRepository.class) public class EmbeddedDatabaseConfig {
/**
* Creates DataSource for an embedded Database (H2).
*/
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).build();
}
并设置范围以在pom.xml中进行测试:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.184</version>
<scope>test</scope>
</dependency>
它已经成功构建并在JUnit测试中,但是当我在服务器上运行它时,它报告错误:
java.lang.ClassNotFoundException: org.h2.Driver
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1274)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1108)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:250)
at org.springframework.jdbc.datasource.embedded.H2EmbeddedDatabaseConfigurer.getInstance(H2EmbeddedDatabaseConfigurer.java:48)
at org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseConfigurerFactory.getConfigurer(EmbeddedDatabaseConfigurerFactory.java:39)
... 51 more
我很困惑:junit测试不会在运行时运行,对吗?为什么我的代码会自动读取java config类,而找不到驱动程序类?
答案 0 :(得分:0)
虽然我无法指出确切的问题,但是您面临的问题是,在尝试运行测试时org.h2.Driver不可用。如注释之一所述,确保jar在类路径中可用。
PS:如果您正在使用Ant构建并尝试在部署到生产环境之前运行测试,请确保在ANT运行测试之前该jar可用。