Существует ли механизм scalaTest, аналогичный аннотации TestNg зависящий от методу - PullRequest
7 голосов
/ 10 августа 2011

Могу ли я иметь зависимости между спецификациями scalaTest, чтобы в случае сбоя теста все зависящие от него тесты были пропущены?

Ответы [ 4 ]

3 голосов
/ 11 августа 2011

Я не добавил эту функцию TestNG, потому что в то время у меня не было убедительных вариантов использования, чтобы оправдать ее. С тех пор я собрал несколько вариантов использования и добавляю функцию в следующую версию ScalaTest для решения этой проблемы. Но это не будут зависимые тесты, это просто способ «отменить» тест, основанный на невыполненном предварительном условии.

В то же время вы можете просто использовать Scala if, если операторы регистрируют только тесты, если условие выполнено, или регистрировать их как игнорируемые, если вы предпочитаете, чтобы они выводились. Если вы используете Spec, он будет выглядеть примерно так:

if (databaseIsAvailable) {
  it("should do something that requires the database") {
     // ...
  }
  it ("should do something else that requires the database") {
  }
 }

Это будет работать только в том случае, если условие будет точно выполнено во время построения теста. Если, например, предполагается, что база данных запускается с помощью метода beforeAll, то вам необходимо выполнить проверку внутри каждого теста. И в этом случае вы могли бы сказать, что ожидается. Что-то вроде:

it("should do something that requires the database") {
  if (!databaseIsAvailable) pending
  // ...
}
it("should do something else that requires the database") {
  if (!databaseIsAvailable) pending
  // ...
}
1 голос
/ 28 декабря 2012

Вот черта Scala, которая делает все тесты в наборе тестов неудачными, если какой-либо тест не пройден.
(Спасибо за предложение, Йенс Шаудер (который опубликовал другой ответ на этот вопрос).)

Плюсы: простые для понимания тестовые зависимости.
Минусы: не очень настраиваемые.

Я использую его для своих автоматических тестов браузера.Если что-то не получается, то, как правило, нет смысла продолжать взаимодействовать с графическим интерфейсом, поскольку он находится в «испорченном» состоянии.

Лицензия: Public domain (CC0 Creative Common) или (по вашему выбору)лицензия MIT.

import org.scalatest.{Suite, SuiteMixin}
import scala.util.control.NonFatal


/**
 * If one test fails, then this traits cancels all remaining tests.
 */
trait CancelAllOnFirstFailure extends SuiteMixin {
  self: Suite =>

  private var anyFailure = false

  abstract override def withFixture(test: NoArgTest) {
    if (anyFailure) {
      cancel
    }
    else try {
      super.withFixture(test)
    }
    catch {
      case ex: TestPendingException =>
        throw ex
      case NonFatal(t: Throwable) =>
        anyFailure = true
        throw t
    }
  }
}
0 голосов
/ 03 февраля 2017

Вы можете использовать черту org.scalatest.CancelAfterFailure для отмены оставшихся тестов после первого сбоя:

import org.scalatest._

class MySpec extends FunSuite with CancelAfterFailure {
  test("successfull test") {
    succeed
  }

  test("failed test") {
    assert(1 == 0)
  }

  test("this test and all others will be cancelled") {
    // ...
  }
}
0 голосов
/ 10 августа 2011

Я не знаю о готовом решении.Но вы можете довольно легко написать свои собственные приборы.

См. «Составление составных признаков приспособления» в javadoc признака Suite

Такой прибор, например, может заменить всевыполнение теста после первого с вызовами pending

...