带有 Junit 测试的 sbt 程序集失败
sbt assembly with Junit test fail
我是 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 是我的抽象测试 class,它应该在每个测试 class 中用 @BeforeClass
初始化一个 spark 上下文。我只包括这个因为我怀疑它可能是失败的原因。
你对如何解决有什么建议吗?
谢谢
我像这样实例化了一个 class:
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()
一切都开始起作用了。
任何人都知道为什么?
我是 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 是我的抽象测试 class,它应该在每个测试 class 中用 @BeforeClass
初始化一个 spark 上下文。我只包括这个因为我怀疑它可能是失败的原因。
你对如何解决有什么建议吗?
谢谢
我像这样实例化了一个 class:
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()
一切都开始起作用了。
任何人都知道为什么?