使用SBT指定Specs2规范执行的顺序

时间:2016-01-17 16:25:32

标签: scala sbt specs2

我正在尝试指定运行Spec2规范的顺序,我知道sequential关键字确保它们一个接一个地运行,但这对应于规范中的测试(并且没有'实际上保证任何订单)

我发现了这个问题:https://stackoverflow.com/a/15832297/1757402看起来很有希望但又一次,似乎只是在规范中对测试进行排序

我假设SBT / Specs按照JVM返回类的顺序运行规范,有什么方法可以改变它吗?或者以任何方式保证订单?

所以说我有以下规格:

CApplicationSpec.scala

@RunWith(classOf[JUnitRunner])
class CApplicationSpec extends Specification {
  "CApplicationSpec" should {
    "be OK" in new WithApplication{
      OK must equalTo(OK)
    }
  }
}

BApplicationSpec

@RunWith(classOf[JUnitRunner])
class BApplicationSpec extends Specification {
  "BApplicationSpec" should {
    "be OK" in new WithApplication{
      OK must equalTo(OK)
    }
  }
}

目前如果我测试这些,执行的顺序每次都会改变,我想要一种方法能够保证BApplication(或任何其他规范)总是先运行,也许按字母顺序排序?

2 个答案:

答案 0 :(得分:0)

您可以创建一个规范"link"其他规范并按指定顺序运行:

object AllSpecifications extends Specification { def is = s2"""
  ${"run BSpecification" ~ BSpecification}
  ${"run CSpecification" ~ CSpecification}
 """
}

答案 1 :(得分:0)

我最终通过SBT使用testGrouping

来完成
//Put all tests into a single Group so that SBT reports correct number of tests, but order them by test name
testGrouping in Test <<= definedTests in Test map { tests => {
    val sortedTests = tests map {
      test => new Tests.Group(test.name, Seq(test), Tests.InProcess)
    } sortBy (_.name.toLowerCase) flatMap {
      _.tests
    }
    Seq(new Tests.Group("Tests", sortedTests, Tests.InProcess))
  }
}

按字母顺序排序所有测试(包括包名称)然后我想要在特定包装中首先运行所有规格