Подтвердить что ты не робот

Настройка для быстрого выхода SBT (стоп) на ошибку

Я использую многопроектную сборку SBT (v0.13) и хотел бы, чтобы она быстро проваливалась (остановка) при первой ошибке (компиляции), обнаруженной в подпроекте.

Текущее поведение таково, что когда что-то не удается скомпилировать в подпроекте, сборка продолжается (для компиляции всех других подпроектов).

Есть ли способ/настройка, чтобы SBT останавливался и выходил, как только обнаружился первый подпроект с ошибкой компиляции?

4b9b3361

Ответ 1

Короче говоря, насколько мне известно, нет, SBT не может "быстро провалиться" на компиляторе или в тестовой ошибке.

Насколько мне известно, SBT не контролирует это. SBT просто вызывает соответствующую тестовую среду, когда проверяет ваши модульные тесты. Затем инфраструктура тестирования может решить, в каком порядке запускать тесты, выполнять их одновременно, как сообщать о проблемах и т.д. Конечно, каждая среда тестирования имеет свои особенности, конфигурацию и соглашения. Двумя наиболее широко используемыми тестовыми средами для Scala являются ScalaTest и Specs2.

К счастью, вы можете получить запрашиваемое вами поведение в Specs2 или ScalaTest. Ниже я привел простые примеры модульных тестов, которые рано провалились.

ScalaTest

Вы можете получить отказоустойчивое поведение в ScalaTest для наборов с одним тестом, смешав черту CancelAfterFailure. Например, этот тест выполнит первый тест, провалит второй и покажет третий как отмененный.

class SomeSuite extends FunSuite with CancelAfterFailure with Assertions {

  test("first") {
    println("first")
  }

  test("second") {
    assert(false)
  }

  test("third") {
    println("third")
  }
}

Specs2

Как и в ScalaTest, вы можете контролировать поведение в Specs2 для каждой спецификации. Чтобы получить поведение, похожее на отказоустойчивое, вам нужно добавить в свою спецификацию два аргумента: sequential и stopOnFail. Смотрите документы для полного списка аргументов, которые вы можете установить. (Вам нужны оба, если вы хотите очевидное линейное упорядочение, так как Specs2 по умолчанию будет выполнять ваши тесты одновременно!)

class SomeSpec extends Specification {

  sequential
  stopOnFail

  "specs2" should {
    "first" in {
      println("first")
      ok
    }

    "second" in {
      "foo" must equalTo ("bar")
    }

    "third" in {
      println("third")
    }
  }
}