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。
尝试获取最新版本并查看它是否至少部分修复,即当不是 运行 并行时。
我正在使用 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。 尝试获取最新版本并查看它是否至少部分修复,即当不是 运行 并行时。