2015-10-08 2 views
3

Я использую sbt 0.13.9 (и ранее 0.13.8) и Scala 2.11.6.sbt интеграционные тесты, возвращающие код выхода 0 при неудачных тестах

При выполнении интеграционных тестов для моего проекта sbt всегда возвращает «успех» с кодом выхода 0, даже если он подтверждает неудачи теста. Конфигурация и настройки теста интеграции - это фондовые из sbt (см. Build.sbt ниже).

Обратите внимание на то, как отказ не распечатывает раздел «Неисправные тесты:», в отличие от отказа модульного теста.

Picture of integration test failing with sbt succeeding

Это странно по сравнению с единичными тестами, которые не могут правильно вызвать SBT вернуть код выхода 1.

Picture of unit test failing with sbt also failing

С и мое подразделение и интеграции тестов, я имел чтобы включить forking, чтобы избежать проблем с загрузкой классов из-за динамической загрузки библиотеки Java. Если это была проблема с форкированием, я бы предположил, что я тоже увижу проблему с модульными тестами.

Мои интеграционные тесты связаны с запуском внешних процессов, которые я не знаю, влияет ли это на результаты sbt или нет.

Проект в вопросе можно найти здесь: build.sbt https://github.com/chipsenkbeil/scala-debugger

проекта заключается в следующем:

// 
// 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) 

ответ

2

Похоже, вы попали в открытый вопрос: https://github.com/sbt/sbt/issues/1890. Это связано с: https://github.com/scalatest/scalatest/issues/432. Постарайтесь получить последнюю версию и посмотреть, хотя бы она частично исправлена, т. Е. Когда она не работает параллельно.

+0

Это была моя проблема. Как оказалось, последняя версия scalatest (3.0.0-M9) содержит исправление; поэтому, обновление до этой версии исправило мою проблему. Благодаря! – Senkwich