似乎我的 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 测试在运行时运行,数据源丢失的主要内容,如果未能解决你的问题,请参考以下文章

Micronaut 和 JUnit 回滚

使用hsql hibernate数据源隔离Junit测试

从 DOS 命令行运行 JUnit 测试时出错

选择要运行的配置类型时,在 IntelliJ IDEA 15 中运行 Gradle 测试而不是 Junit 测试

使 Spring JUnit Test 在测试数据库上运行

在 Spring Boot 应用程序中运行 JUnit 单元测试而不提供数据源