Scala Scalatest Maven 集成测试配置

第一篇:Scala Scalatest Maven 单元测试配置(测试报告和覆盖率报告)

第二篇:Scala Scalatest Maven 集成测试配置

最近在做单元测试的时候发现了一个问题,我使用静态变量存放环境信息,默认使用的是单元测试的环境(unitTest),可是跑到集成测试(integrationTest)的时候,发现环境信息依然是单元测试的环境信息。因为集成测试也是作为单元测试来运行的,并没有在maven中配置集成测试。

如果集成测试类和单元测试类都在单元测试阶段运行,那么就会在同一个JVM中,这样的话,静态变量会在跑单元测试的时候初始化,但是并不能销毁而重新初始化。所以目标要与单元测试分开,让跑集成测试的时候重新初始化静态变量。这样才能解决问题。

如果大家没有看懂文字描述,可以看一下代码:

/**
  * @Author Darren Zhang
  * @Date 2019-01-18
  * @Description
  **/
trait RunArguments {

}

object RunArguments {
  // store configuration file key, value
  val conf = new Properties();

  /**
    * parse configuration file
    *
    * @param confPath configuration file path
    */
  def parseConfigFile(confPath: String): Unit = {
    var fileSystem: FileSystem = null
    try {
      fileSystem = FileSystem.get(new Configuration)
      conf.load(fileSystem.open(new Path(confPath)))
    } finally {
      if (fileSystem != null) {
        fileSystem.close()
      }
    }
  }
}
/**
  * @Author Darren Zhang
  * @Date 2019-01-16
  * @Description table path
  **/
object FilePath {

  // Static Data
  val INTAB_PERIOD_PATH = RunArguments.conf.getProperty("INTAB_PERIOD_PATH")
...
}
FilePath.INTAB_PERIOD_PATH 

第一次访问FilePath时,FilePath会被初始化,这个时候即便是RunArguments.parseConfigFile() 再次被调用,FilePath的内容也不会发生改变。

只能让单元测试和集成测试跑在不同的JVM中,目标清楚后,开始找资料解决如何配置集成测试。

由上一篇文章Scala Scalatest Maven 单元测试配置(测试报告和覆盖率报告)可知,我使用的是scalatest-maven-plugin来运行测试程序的,那么就来看看有没有什么配置项来解决集成配置的问题。

到GitHub上看看https://github.com/scalatest/scalatest-maven-plugin,发现只有如下信息:

Scala Scalatest Maven 集成测试配置_第1张图片

发现并没有什么关于集成测试的介绍,于是在Google长查询了一下,得到了一些有效信息,配置如下:


    org.scalatest
    scalatest-maven-plugin
    2.0.0
    
        ${project.build.directory}/surefire-reports
        .
        WDF TestResult.txt
        false
    
    
        
            unit-test
            test
            
                test
            
            
                
                (?<!(IT|Integration))(Test|Suite|Case)
                ${project.build.directory}/site/unit-test
            
        
        
            integration-test
            
            integration-test
            
                test
            
            
                
                (?<=IT|Integration)(Test|Suite|Case)
                ${project.build.directory}/site/integration-test
            
        
    

这样就可以运行我的集成测试,并且与单元测试分开了。

 

参考:

https://stackoverflow.com/questions/32845047/share-scala-class-in-test-folder-with-java-tests-in-maven

https://groups.google.com/forum/#!topic/scalatest-users/b1ME5zp-7VQ

https://www.cnblogs.com/chowmin/articles/3877129.html

你可能感兴趣的:(Spark)