有没有类似于TestNg dependsOnMethods注解的scalaTest机制

我可以在scalaTest规范之间有依赖关系吗?如果测试失败,所有依赖它的测试都会被跳过?


我没有添加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
  // ...
}

这是一个斯卡拉特质,如果任何测试失败,它将使测试套件中的所有测试都失败。
(感谢这个建议,Jens Schauder(他发表了另一个关于这个问题的答案)。)

优点:简单易懂的测试依赖关系。
缺点:不是非常可定制的。

我用它来进行自动浏览器测试。 如果某件事情失败了,那么通常没有必要继续与GUI进行交互,因为它处于“混乱”状态。

许可证:公共领域(Creative Common的CC0),或(根据您的选择)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
    }
  }
}

我不知道现成的解决方案。 但是你可以很容易地编写自己的灯具。

请参阅Suite特征的javadoc中的“编写可堆叠夹具特征”

举例来说,这样的夹具可以替换第一个执行后的所有测试执行,并调用pending

链接地址: http://www.djcxy.com/p/54203.html

上一篇: is there a scalaTest mechanism similar to TestNg dependsOnMethods annotation

下一篇: Custom etag generation