如何从 ScalaTest 中获取一个 return 值来指示测试套件失败?
How can I get a return value from ScalaTest indicating test suite failure?
我正在以编程方式运行安装 ScalaTest (FlatSpec
) 套件,如下所示:
new MyAwesomeSpec().execute()
有什么方法可以确定是否所有测试都通过了? Suite#execute()
returns Unit
在这里,所以没有帮助。理想情况下,我想 运行 整个套件,然后得到一个 return 值,指示是否有任何测试失败;另一种方法是在任何失败的测试中立即 fail/return。
我可能可以通过编写一个新的 FlatSpec
子类来实现这一点,该子类将 Scalatest Suite#execute()
方法覆盖为 return 一个值,但是有没有更好的方法来做我想做的事情在吗?
org.scalatest.Suite
还有run
功能,returns单个执行测试的状态。
通过一些调整,我们可以访问每个测试的执行结果。要 运行 测试,我们需要提供一个 Reporter
实例。在我们的简单案例中,一个 ad-hoc 空报告器就足够了:
val reporter = new Reporter() {
override def apply(e: Event) = {}
}
所以,让我们执行它们:
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")
})
这将产生类似于以下的输出:
Test: 'This test should pass'
Status=OK
Test: 'Another test should fail'
Status=FAILURE!
访问每个测试用例名称及其各自的执行结果后,您应该有足够的数据来实现您的目标。
我正在以编程方式运行安装 ScalaTest (FlatSpec
) 套件,如下所示:
new MyAwesomeSpec().execute()
有什么方法可以确定是否所有测试都通过了? Suite#execute()
returns Unit
在这里,所以没有帮助。理想情况下,我想 运行 整个套件,然后得到一个 return 值,指示是否有任何测试失败;另一种方法是在任何失败的测试中立即 fail/return。
我可能可以通过编写一个新的 FlatSpec
子类来实现这一点,该子类将 Scalatest Suite#execute()
方法覆盖为 return 一个值,但是有没有更好的方法来做我想做的事情在吗?
org.scalatest.Suite
还有run
功能,returns单个执行测试的状态。
通过一些调整,我们可以访问每个测试的执行结果。要 运行 测试,我们需要提供一个 Reporter
实例。在我们的简单案例中,一个 ad-hoc 空报告器就足够了:
val reporter = new Reporter() {
override def apply(e: Event) = {}
}
所以,让我们执行它们:
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")
})
这将产生类似于以下的输出:
Test: 'This test should pass'
Status=OK
Test: 'Another test should fail'
Status=FAILURE!
访问每个测试用例名称及其各自的执行结果后,您应该有足够的数据来实现您的目标。