繁体   English   中英

在Maven中完成集成测试后如何运行软件包目标?

[英]How run package goal after finished integration tests in maven?

默认的构建Maven周期是这样的:

  1. 编译
  2. 测试
  3. 整合前测试
  4. 整合测试
  5. 整合后测试
  6. 校验
  7. 安装

pre-intergation-test将启动一个数据库。 集成intergation-test是弹簧测试,在启动应用程序并对数据库进行测试时。 post-intergation-test数据库已关闭。

因此,对于那种情况,不需要打包整个应用程序,是否有一种方法可以验证目标之后打包应用程序?

Maven生命周期中的集成测试阶段的目的是测试打包的工件。 因此,尝试在打包阶段之前执行集成测试没有任何意义。

另一方面,您具有测试阶段以执行单元测试。 如果您遵循单元测试的严格定义,那么它们就不需要数据库。 换句话说,在单元测试执行期间:应该模拟数据库。

据我了解您的情况,您有需要数据库的单元测试。 这不是一个完美的设计,在理想情况下,您应该考虑重新设计单元测试,以使用模拟而不是数据库。

但是,您也可以使用某种中间解决方案,在其中在测试阶段之前/之后启动/停止数据库。 这是完整的生命周期参考 ,如您所见,您可以将数据库启动绑定到generate-test-resources阶段。 (我不推荐这种解决方案,因为您的单元测试变得繁重,并且在IDE中运行它们也变得更加复杂,因为它需要执行maven阶段)

常用的替代解决方案是在测试本身中设置一个小的内存数据库。 使用spring非常容易,这是一个示例测试配置,以证明:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;

import javax.sql.DataSource;

@Configuration
public class UnitTestWithDBConfiguration {

    @Bean
    public DataSource dataSource(){
        return new EmbeddedDatabaseBuilder()
                .setType(EmbeddedDatabaseType.H2)
                .setScriptEncoding("UTF-8")
                .ignoreFailedDrops(true)
                .addScript("dbsetup.sql")
                .build();
    }

}

此示例使用h2数据库+ src / test / resources / dbsetup.sql文件初始化数据库(在加载应用程序上下文时)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM