使用sbt和IntelliJ IDEA使用ScalaTest的BeforeAndAfterAll特性的正确方法是什么?

时间:2016-07-29 18:54:30

标签: intellij-idea sbt scalatest

我正在尝试为Spark作业设置测试框架。我想使用spark-testing-base的SharedSparkContext特性,它依赖于ScalaTest的BeforeAndAfterAll特性来管理设置和拆除。关于我当前环境的一些事情导致在每个测试用例周围调用beforeAll和afterAll方法。

(即使我想允许这种冗余行为,我也不能:我不知道如何正确地拆除我的HiveContext对象,所以对beforeAll的第二次调用抛出一个异常,在“ERROR XSDB6:另一个Derby实例可能已经启动了数据库/ Users / applemacbookpro / git / my-project / metastore_db。“)

我正在使用IntelliJ IDEA和SBT管理的版本。

  • MacOS 10.11.4
  • IntelliJ IDEA 2016.1.3
  • 不确定SBT版本,应该是最近的
  • ScalaTest 2.2.6

根据spark-testing-base的自述文件和this question,我已经放了

'

在build.sbt。

这是我的例子:

parallelExecution in Test := false 

我通过右键单击编辑器窗口并从上下文菜单运行来触发它;输出是:

import org.scalatest.{BeforeAndAfterAll, FlatSpec}

class ExampleSpec extends FlatSpec with BeforeAndAfterAll {
  override def beforeAll(): Unit = {
    println("in beforeAll")
    super.beforeAll()
  }

  override def afterAll() {
    println("in afterAll")
    super.afterAll()
  }

  behavior of "example"

  it should "succeed" in {
    println("test 1")
  }

  it should "succeed again" in {
    println("test2")
  }
}

1 个答案:

答案 0 :(得分:2)

我认为这是和Intellij / Scalatest的错误。

右键单击“编辑器”窗口时,我可以重现您的情况。

但是,如果您在“项目”窗口中右键单击您的课程,然后从上下文菜单中运行,它将按预期工作:

in beforeAll
test 1
test2
in afterAll

在编辑器窗口中右键单击时,Intellij似乎实例化了两个测试方法,每个测试方法一个。 您可以在“运行/调试”窗口中看到ExampleSpec类多次出现而不是一次。