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

标签 scala unit-testing sbt integration-testing exit-code

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

为我的项目运行集成测试时,sbt 总是返回“成功”,退出代码为 0,即使它确认测试失败也是如此。集成测试配置和设置是 sbt 的常用配置(请参阅下面的 build.sbt)。

请注意,与单元测试失败不同,失败不会打印出“失败的测试:”部分。

Picture of integration test failing with sbt succeeding

这与单元测试相比很奇怪,单元测试确实会正确触发 sbt 返回退出代码 1。

Picture of unit test failing with sbt also failing

对于我的单元测试和集成测试,我必须启用 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/

相关文章:

scala - 使用 Akka/Akka Streams/Akka HTTP 时出现 Akka 版本冲突

playframework - 如何在 sbt 中的测试任务之前附加自定义任务以执行?

scala - 玩! scala 和 Akka : how to test if an actor A sent a message to an actor B?

unit-testing - 如何访问自定义扩展规范中的 sinatra 设置?

java - Spark GraphX 中完整图的分区策略

c# - 如何对在 MVVM 中调用异步方法的 DelegateCommand 进行单元测试

android - 我想运行特定构建类型的单元测试和espresso测试用例

sbt - 如何在 SBT 项目中列出事件插件?

scala - 实现功能时需要覆盖关键字

java - 如何仅允许单个连接(url/端口)从 flink 应用程序读取和写入