sbt 集成测试在测试失败时返回退出代码 0

sbt integration tests returning exit code 0 when tests fail

我正在使用 sbt 0.13.9(以及之前的 0.13.8)和 Scala 2.11.6。

当 运行 对我的项目进行集成测试时,sbt 总是 returns "success" 退出代码 0,即使它承认测试失败。集成测试配置和设置是 sbt 的常用配置(请参阅下面的 build.sbt)。

注意与单元测试失败不同,失败如何不打印出 "Failed tests:" 部分。

与单元测试相比这很奇怪,单元测试正确触发 sbt 到 return 退出代码 1。

对于我的单元测试和集成测试,我必须启用分叉以避免由于动态加载 Java 库而导致的一些类加载器问题。如果分叉是问题所在,我想我也会看到单元测试的问题。

我的集成测试涉及启动外部进程,我不知道这是否会影响 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)

您似乎遇到了未解决的问题:https://github.com/sbt/sbt/issues/1890. It's related to: https://github.com/scalatest/scalatest/issues/432。 尝试获取最新版本并查看它是否至少部分修复,即当不是 运行 并行时。