似乎我的 Junit 测试在运行时运行,数据源丢失
Posted
技术标签:
【中文标题】似乎我的 Junit 测试在运行时运行,数据源丢失【英文标题】:Seems my Junit test runs in runtime, the datasource missing 【发布时间】:2018-09-18 13:38:33 【问题描述】:我在单元测试中使用了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类,却没有找到驱动类?
【问题讨论】:
也许您不小心在生产模式下也使用了该测试配置? 将 h2 JDBC 驱动程序添加到您的类路径中,或者如果您使用 IDE,则将其作为库添加到您的项目中。 ***.com/questions/29609985/… 的可能重复项 @Nithin 看起来问题不是缺少依赖项,而是在生产配置文件/代码中使用测试配置。 我在 IntelliJ 上遇到了同样的问题,它找不到 org.h2.Driver。我从网上尝试了几种解决方案,但是在简单地重新启动 IntelliJ 后,问题就解决了。希望这有助于节省一些时间。 @Nithin 我猜他正试图在除 dev 之外的不同环境中运行代码......猜他需要理清依赖关系 【参考方案1】:虽然我无法指出确切的问题,但您面临的问题是 org.h2.Driver 在尝试运行测试时不可用。如其中一个 cmets 所述,确保该 jar 在类路径中可用。
PS:如果您正在使用 Ant 构建并尝试在部署到生产环境之前运行测试,请确保 jar 在 ANT 运行测试之前可用。
【讨论】:
以上是关于似乎我的 Junit 测试在运行时运行,数据源丢失的主要内容,如果未能解决你的问题,请参考以下文章