找不到测试的现有数据Scala Specs2

Cas*_*sie 5 testing scala specs2 apache-spark

我正在构建集成测试,它将读取在先前测试用例之后生成的数据,并将其与预期结果进行核对。当我运行测试时,尽管生成的数据位于该目录中,但在下一个测试用例中该目录中不可见该生成的数据。当我重新运行测试时,将拾取数据并从目录中读取数据。可能是什么原因呢?测试执行的顺序可能有问题吗?

这是我的测试结果:

class LoaderSpec extends Specification{

     sequential

      "Loader" should {
        "run job from assembled .jar" in {
          val res = "sh ./src/test/runLoader.sh".!
          res must beEqualTo(0)
        }

        "write results to the resources" in {
          val resultsPath = "/results/loader_result"
          resourcesDirectoryIsEmpty(resultsPath) must beFalse
        }

        "have actual result same as expected one" in {
          val expected: Set[String] = readFilesFromDirs("source/loader_source")
          println(expected)

          val result: Set[String] = readFilesFromDirs("/results/loader_result")
          println(result)

          expected must beEqualTo(result)
        }
      }
}
Run Code Online (Sandbox Code Playgroud)

前一个测试成功,而后两个测试失败,因为未找到数据。当我重新运行相同的测试套件而不进行任何更改时,所有测试都将成功。

runLoader.sh脚本:

$SPARK_HOME/bin/spark-submit \
 --class "loader.LoaderMain" \
 \
 --conf "spark.hadoop.fs.gs.impl=com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem" \
 --conf "spark.hadoop.fs.AbstractFileSystem.gs.impl=com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS" \
 --conf "spark.hadoop.fs.gs.project.id=loader-files" \
 --conf "spark.hadoop.fs.gs.implicit.dir.repair.enable=false" \
 \
 --conf "spark.loader.Config.srcPaths=;src/test/resources/source/loader" \
 --conf "spark.loader.Config.dstPath=src/test/resources/results/loader_result" \
 --conf "spark.loader.Config.filesPerPartner=10" \
 \
 --conf "spark.shuffle.memoryFraction=0.4" \
 --conf "spark.task.maxFailures=20" \
 --conf "spark.executor.extraJavaOptions=${EXTRA_JVM_FLAGS}" \
 \
 --master "local[8]" \
 --driver-memory 1500M \
 --driver-java-options "${EXTRA_JVM_FLAGS}" \
 $(find "$(pwd)"/target/scala-2.11 -name 'loader-assembly-*.jar')
Run Code Online (Sandbox Code Playgroud)

Cas*_*sie 3

我尝试改变读取文件的方式。事实证明,从资源中读取可能会产生此错误,因为在所有测试之前都会读取内容。尽管当我仅从目录中读取数据时,内容会更新并且不会发生此错误。这是我改变测试的方式:

"write results to the resources" in {
  val resultsPath = "./src/dockerise/resource/results/loader_result"
  resourcesDirectoryIsEmpty(resultsPath) must beFalse
}
Run Code Online (Sandbox Code Playgroud)