我正在尝试为Spark作业设置测试框架。我想使用spark-testing-base的SharedSparkContext特性,它依赖于ScalaTest的BeforeAndAfterAll特性来管理设置和拆除。关于我当前环境的一些事情导致在每个测试用例周围调用beforeAll和afterAll方法。
(即使我想允许这种冗余行为,我也不能:我不知道如何正确地拆除我的HiveContext对象,所以对beforeAll的第二次调用抛出一个异常,在“ERROR XSDB6:另一个Derby实例可能已经启动了数据库/ Users / applemacbookpro / git / my-project / metastore_db。“)
我正在使用IntelliJ IDEA和SBT管理的版本。
根据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")
}
}
答案 0 :(得分:2)
我认为这是和Intellij / Scalatest的错误。
右键单击“编辑器”窗口时,我可以重现您的情况。
但是,如果您在“项目”窗口中右键单击您的课程,然后从上下文菜单中运行,它将按预期工作:
in beforeAll
test 1
test2
in afterAll
在编辑器窗口中右键单击时,Intellij似乎实例化了两个测试方法,每个测试方法一个。
您可以在“运行/调试”窗口中看到ExampleSpec
类多次出现而不是一次。