【问题标题】:sbt assembly with Junit test fail带有 Junit 测试的 sbt 组装失败
【发布时间】:2019-10-10 03:05:36
【问题描述】:

我对 scala 和 sbt 很陌生。
我想用 sbt 程序集运行 Junit 测试。
我设计了我所有的测试,并使用 IntelliJ 正确运行。 当我尝试使用测试构建时,它总是会失败并给出很多错误。

这是我的 build.sbt

name := "updater"
version := "0.1-SNAPSHOT"
scalaVersion := "2.11.12"

val sparkVersion = "2.4.0"

    libraryDependencies ++= Seq(

          //"org.scala-lang" % "scala-reflect" % "2.11.12",
          "org.apache.spark" %% "spark-core" % sparkVersion % Provided,
          "org.apache.spark" %% "spark-sql" % sparkVersion % Provided,
          "com.typesafe" % "config" % "1.3.4",


          //Testing
          "junit" % "junit" % "4.10" % Test,
          "com.novocode" % "junit-interface" % "0.11" % Test
          //  exclude("junit", "junit-dep")
          ,
          //"org.scalatest" %% "scalatest" % "3.0.7" % Test,
          "org.easymock" % "easymock" % "4.0.2" % Test,


          //Logging
          "ch.qos.logback" % "logback-classic" % "1.2.3",
          "com.typesafe.scala-logging" %% "scala-logging" % "3.9.0"
        )

        assemblyMergeStrategy in assembly := {
          case PathList("src/test/resources/library.properties", xs@_*) => MergeStrategy.discard
          case PathList("META-INF", xs@_*) => MergeStrategy.discard
          case x => MergeStrategy.first
        } 

我附上你the log file 作为问题,对我来说,作为新手似乎无法理解。这让我快疯了。

This 是我的抽象测试类,它应该在每个测试类中用@BeforeClass 初始化一个火花上下文。我只包括这个是因为我怀疑它可能是失败的原因。

您对如何解决有什么建议吗?
谢谢

【问题讨论】:

  • 你使用的是什么版本的 sbt、scala 和 sbt-assembly?我可以用你的设置来构建。也许也将您的测试包含在 pastebin 中。
  • 我为 scala 版本编辑了我的代码 sn-p。我的 sbt 版本是 1.2.8
  • 你是从 IDE 还是 sbt 运行测试?
  • 当我从 intellij(播放按钮)进行测试时,一切都很顺利。当我启动 sbt 程序集时,我的所有测试都会中断

标签: scala junit sbt sbt-assembly


【解决方案1】:

我正在实例化一个这样的类:

 abstract class SparkTest {

  val spark: SparkSession = SparkTest.spark

}

    object SparkTest {
      var spark: SparkSession = _

      @BeforeClass
      def initializeSpark(): Unit = {
        spark = SparkSession
          .builder()
          .appName("TableUpdaterTest")
          .master("local")
          .getOrCreate()
      }

      @AfterClass
      def stopSpark(): Unit = {
            spark.stop()
      }
    }

显然,通过评论 spark.stop() 一切都开始工作了。
任何人都知道为什么?

【讨论】:

    猜你喜欢
    • 2015-05-22
    • 1970-01-01
    • 2015-04-27
    • 2018-08-22
    • 2011-03-29
    • 2019-05-02
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多