我正在使用 sbt 0.13.9(以及之前的 0.13.8)和 Scala 2.11.6。
为我的项目运行集成测试时,sbt 总是返回“成功”,退出代码为 0,即使它确认测试失败也是如此。集成测试配置和设置是 sbt 的常用配置(请参阅下面的 build.sbt)。
请注意,与单元测试失败不同,失败不会打印出“失败的测试:”部分。
这与单元测试相比很奇怪,单元测试确实会正确触发 sbt 返回退出代码 1。
对于我的单元测试和集成测试,我必须启用 fork 以避免由于动态加载 Java 库而导致的一些类加载器问题。如果 fork 是问题所在,我会假设我也会看到单元测试的问题。
我的集成测试确实涉及启动外部进程,我不知道这是否会影响 sbt 的结果。
相关项目可在此处找到:https://github.com/chipsenkbeil/scala-debugger
项目的build.sbt如下:
//
// DEBUGGER API PROJECT CONFIGURATION
//
lazy val scalaDebuggerApi = project
.in(file("scala-debugger-api"))
.configs(IntegrationTest)
.settings(Common.settings: _*)
.settings(Defaults.itSettings: _*)
.settings(Seq(
name := "scala-debugger-api",
// NOTE: Fork needed to avoid mixing in sbt classloader, which is causing
// LinkageError to be thrown for JDI-based classes
fork in Test := true,
fork in IntegrationTest := true,
libraryDependencies ++= Seq(
"org.slf4j" % "slf4j-api" % "1.7.5",
"org.slf4j" % "slf4j-log4j12" % "1.7.5" % "test,it",
"log4j" % "log4j" % "1.2.17" % "test,it",
"org.scalatest" %% "scalatest" % "2.2.1" % "test,it",
"org.scalamock" %% "scalamock-scalatest-support" % "3.2.1" % "test,it"
),
// JDK Dependency (just for sbt, must exist on classpath for execution,
// cannot be redistributed)
internalDependencyClasspath in Compile +=
{ Attributed.blank(Build.JavaTools) },
internalDependencyClasspath in Runtime +=
{ Attributed.blank(Build.JavaTools) },
internalDependencyClasspath in Test +=
{ Attributed.blank(Build.JavaTools) },
internalDependencyClasspath in IntegrationTest +=
{ Attributed.blank(Build.JavaTools) }
): _*)
.dependsOn(scalaDebuggerTest % "test->compile;it->compile")
//
// DEBUGGER TEST CODE PROJECT CONFIGURATION
//
lazy val scalaDebuggerTest = project
.in(file("scala-debugger-test"))
.settings(Common.settings: _*)
.settings(
// Do not publish the test project
publishArtifact := false,
publishLocal := {}
)
//
// MAIN PROJECT CONFIGURATION
//
lazy val root = project
.in(file("."))
.settings(Common.settings: _*)
.settings(
name := "scala-debugger",
// Do not publish the aggregation project
publishArtifact := false,
publishLocal := {}
).aggregate(scalaDebuggerApi, scalaDebuggerTest)
最佳答案
看起来您遇到了一个 Unresolved 问题:https://github.com/sbt/sbt/issues/1890 .它与:https://github.com/scalatest/scalatest/issues/432有关. 尝试获取最新版本并查看它是否至少部分修复,即当不并行运行时。
关于scala - sbt 集成测试在测试失败时返回退出代码 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33006000/