如何从ScalaTest获取指示测试套件失败的返回值?

Sas*_*lla 6 scala scalatest

我正在以FlatSpec编程方式运行ScalaTest()套件,如下所示:

new MyAwesomeSpec().execute()
Run Code Online (Sandbox Code Playgroud)

有什么办法可以确定所有测试是否通过?Suite#execute()返回Unit此处,因此无济于事。理想情况下,我想运行整个套件,然后获得一个返回值,指示是否有任何测试失败;另一种选择是在任何失败的测试上立即失败/返回。

我可能可以通过编写一个FlatSpec重写Scalatest Suite#execute()方法以返回值的新子类来实现此目的,但是有没有更好的方法来执行我想要的操作?

Ant*_*tot 5

org.scalatest.Suite还具有run函数,该函数返回单个已执行测试的状态。

通过一些调整,我们可以访问每个测试的执行结果。要运行测试,我们需要提供一个Reporter实例。在我们的简单情况下,临时空记者就足够了:

val reporter = new Reporter() {
  override def apply(e: Event) = {}
}
Run Code Online (Sandbox Code Playgroud)

因此,让我们执行它们:

import org.scalatest.events.Event
import org.scalatest.{Args, Reporter}

val testSuite = new MyAwesomeSpec()
val testNames = testSuite.testNames

testNames.foreach(test => {
  val result = testSuite.run(Some(test), Args(reporter))
  val status = if (result.succeeds()) "OK" else "FAILURE!"
  println(s"Test: '$test'\n\tStatus=$status")
})
Run Code Online (Sandbox Code Playgroud)

这将产生类似于以下内容的输出:

Test: 'This test should pass'
    Status=OK
Test: 'Another test should fail'
    Status=FAILURE!
Run Code Online (Sandbox Code Playgroud)

有权访问每个测试用例名称及其各自的执行结果,您应该有足够的数据来实现您的目标。