资讯专栏INFORMATION COLUMN

Spring、Spring Boot和TestNG测试指南 - 集成测试中用Docker创建数据库

sshe / 1496人阅读

摘要:我们还是会以测试关系型数据库里的来做集成测试代码在这里。这个很有用,如果集成测试失败,那么你还可以连接到数据库查看情况。

原文地址

在测试关系型数据库一篇里我们使用的是H2数据库,这是为了让你免去你去安装/配置一个数据库的工作,能够尽快的了解到集成测试的过程。

在文章里也说了:

在真实的开发环境中,集成测试用数据库应该和最终的生产数据库保持一致

那么很容易就能想到两种解决方案:

开发团队使用共用同一个数据库。这样做的问题在于:当有多个集成测试同时在跑时,会产生错误的测试结果。

每个人使用自己的数据库。这样做的问题在于让开发人员维护MySQL数据库挺麻烦的。

那么做到能否这样呢?

测试启动前,创建一个MySQL数据库

测试过程中连接到这个数据库

测试结束后,删除这个MySQL数据库

So, Docker comes to the rescue。

我们还是会以测试关系型数据库里的FooRepositoryImpl来做集成测试(代码在这里)。下面来讲解具体步骤:

安装Docker

请查阅官方文档。并且掌握Docker的基本概念。

配置fabric8 docker-maven-plugin

farbic8 docker-maven-plugin顾名思义就是一个能够使用docker的maven plugin。它主要功能有二:

创建Docker image

启动Docker container

我们这里使用启动Docker container的功能。

大致配置如下

 
   io.fabric8
   docker-maven-plugin
   0.28.0

   
     
       
         
         mysql:8
         
         
           
             
             docker-mysql.port:3306
           
           
           
             123456
             test
             foo
             bar
           
           
           
             
             MySQL init process done. Ready for start up.
             
           
         
       
     
   

   
     
       
       start
       pre-integration-test
       
         start
       
     
     
       
       stop
       post-integration-test
       
         stop
       
     
   
 
配置maven-failsafe-plugin

  org.apache.maven.plugins
  maven-failsafe-plugin
  
    
      integration-test
      
        integration-test
      
    
    
      verify
      
        verify
      
    
  
  
    
    
      jdbc:mysql://localhost:${docker-mysql.port}/test
      foo
      bar
    
  
执行

三种常见用法:

mvn clean integration-test,会启动docker container、运行集成测试。这个很有用,如果集成测试失败,那么你还可以连接到MySQL数据库查看情况。

mvn clean verify,会执行mvn integration-test、删除docker container。

mvn clean install,会执mvn verify,并将包安装到本地maven 仓库。

下面是mvn clean verify的日志:

...
[INFO] --- docker-maven-plugin:0.28.0:start (start) @ spring-test-examples-rdbs-docker ---
[INFO] DOCKER> [mysql:8]: Start container f683aadfe8ba
[INFO] DOCKER> Pattern "MySQL init process done. Ready for start up." matched for container f683aadfe8ba
[INFO] DOCKER> [mysql:8]: Waited on log out "MySQL init process done. Ready for start up." 13717 ms
[INFO]
[INFO] --- maven-failsafe-plugin:2.22.1:integration-test (integration-test) @ spring-test-examples-rdbs-docker ---
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
...
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO]
[INFO] --- docker-maven-plugin:0.28.0:stop (stop) @ spring-test-examples-rdbs-docker ---
[INFO] DOCKER> [mysql:8]: Stop and removed container f683aadfe8ba after 0 ms
[INFO]
[INFO] --- maven-failsafe-plugin:2.22.1:verify (verify) @ spring-test-examples-rdbs-docker ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
...

可以看到fabric8 dmp在集成测试前后start和stop容器的相关日志,且测试成功。

如何找到MySQL的端口开在哪一个呢?运行docker ps查看端口(注意下面的0.0.0.0:32798->3306/tcp):

CONTAINER ID  IMAGE     COMMAND  CREATED  STATUS    PORTS                                NAMES
a1f4b51d7c75  mysql:8   ...      ...      Up 19...  33060/tcp, 0.0.0.0:32798->3306/tcp   mysql-1
参考文档

Fabric8 dmp

Spring boot - Externalized Configuration

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27649.html

相关文章

  • SpringSpring BootTestNG测试指南 - 测试关系型据库

    摘要:地址提供了对的支持,能够让我们很方便对关系型数据库做集成测试。如果想要在打包的时候跳过集成测试,只需要。例子使用因为使用了来做集成测试,得益于其机制,不需要自己构建和的。 Github地址 Spring Test Framework提供了对JDBC的支持,能够让我们很方便对关系型数据库做集成测试。 同时Spring Boot提供了和Flyway的集成支持,能够方便的管理开发过程中产生...

    Meils 评论0 收藏0
  • SpringSpring BootTestNG测试指南 - 使用Spring Boot Test

    摘要:地址前面一个部分讲解了如何使用工具来测试项目,现在我们讲解如何使用工具来测试项目。所以我们可以利用这个特性来进一步简化测试代码。因为只有这样才能够在测试环境下发现生产环境的问题,也避免出现一些因为配置不同导致的奇怪问题。 Github地址 前面一个部分讲解了如何使用Spring Testing工具来测试Spring项目,现在我们讲解如何使用Spring Boot Testing工具来测...

    Anshiii 评论0 收藏0
  • SpringSpring BootTestNG测试指南 - 使用Mockito

    摘要:例子使用源代码我们先给了一个的实现然后又规定了方法的返回值。源代码也就是说,得益于,我们能够很方便地对依赖关系中任意层级的任意做。 Github地址 Mock测试技术能够避免你为了测试一个方法,却需要自行构建整个依赖关系的工作,并且能够让你专注于当前被测试对象的逻辑,而不是其依赖的其他对象的逻辑。 举例来说,比如你需要测试Foo.methodA,而这个方法依赖了Bar.methodB,...

    Alliot 评论0 收藏0
  • SpringSpring BootTestNG测试指南 - 共享测试配置

    摘要:地址在使用工具中提到在测试代码之间尽量做到配置共用。本章将列举几种共享测试配置的方法我们可以将测试配置放在一个里,然后在测试或中引用它。也可以利用的及自定义机制,提供自己的用在测试配置上。 Github地址 在使用Spring Boot Testing工具中提到: 在测试代码之间尽量做到配置共用。...能够有效利用Spring TestContext Framework的缓存机制,Ap...

    CHENGKANG 评论0 收藏0
  • SpringSpring BootTestNG测试指南 - 测试Spring MVC

    摘要:地址提供了,能够很方便的来测试。同时也提供了更进一步简化了测试需要的配置工作。本章节将分别举例说明在不使用和使用下如何对进行测试。例子测试的关键是使用对象,利用它我们能够在不需启动容器的情况下测试的行为。 Github地址 Spring Testing Framework提供了Spring MVC Test Framework,能够很方便的来测试Controller。同时Spring...

    andong777 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<