【问题标题】:How can I get a return value from ScalaTest indicating test suite failure?如何从 ScalaTest 获取指示测试套件失败的返回值?
【发布时间】:2018-08-18 12:06:26
【问题描述】:

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

new MyAwesomeSpec().execute()

有什么方法可以确定是否所有测试都通过了? Suite#execute() 在这里返回 Unit,所以没有帮助。理想情况下,我想运行整个套件,然后获得一个返回值,指示是否有任何测试失败;另一种方法是在任何失败的测试中立即失败/返回。

我可能可以通过编写一个新的 FlatSpec 子类来实现这一点,该子类覆盖 Scalatest 的 Suite#execute() 方法以返回一个值,但是这里有更好的方法来做我想要的吗?

【问题讨论】:

    标签: scala scalatest


    【解决方案1】:

    org.scalatest.Suite 也有run 函数,它返回单个执行测试的状态。

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

    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!
    

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

    【讨论】:

      猜你喜欢
      • 2014-11-18
      • 2013-08-06
      • 2018-11-21
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      相关资源
      最近更新 更多