【问题标题】:What is the right way to use ScalaTest's BeforeAndAfterAll trait with sbt and IntelliJ IDEA?在 sbt 和 IntelliJ IDEA 中使用 ScalaTest 的 BeforeAndAfterAll 特征的正确方法是什么?
【发布时间】:2016-12-04 13:56:34
【问题描述】:

我正在尝试为 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 的自述文件,我已经放了

parallelExecution in Test := false 

在 build.sbt 中。

这是我的例子:

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")
  }
}

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

/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/bin/java...
Testing started at 2:50 PM ...
in beforeAll
test 1
in afterAll
in beforeAll
test2
in afterAll

Process finished with exit code 0

【问题讨论】:

  • 无法使用 Windows-7 / IntelliJ-2016.2 / SBT-0.13.12 / ScalaTest-2.2.6 重现 Scala-2.10 和 Scala-2.11。

标签: intellij-idea sbt scalatest


【解决方案1】:

我认为这是 Intellij/Scalatest 错误。

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

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

in beforeAll
test 1
test2
in afterAll

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

【讨论】:

  • 哦,哇,我放弃了,几个月前写了一个kludge来解决这个问题。 (拼凑是在一个对象中进行设置;我猜是一流的单身人士获胜。)
猜你喜欢
  • 2022-01-04
  • 2012-01-29
  • 1970-01-01
  • 2013-11-29
  • 1970-01-01
  • 1970-01-01
  • 2014-02-16
  • 2016-03-28
  • 2020-06-06
相关资源
最近更新 更多