如何在IntelliJ idea中运行ScalaTest?

23
我正在尝试在Intellij IDEA(最新的社区版,带有最新的Scala插件)中运行Scala Flatspec测试,但是一直遇到“空测试套件”错误。

我尝试使用正常的右键“运行”菜单,但无效。我还尝试创建一个新的ScalaTest配置,但仍然无法找到测试。

我能够使用带有unit的JScalaTest,但我真的更喜欢使用Flatspec语法。

更新:为类添加@RunWith(classOf[JUnitRunner])注释也没有帮助。

谢谢!

class SampleTestSpec extends FlatSpec with ShouldMatchers {
    "test" should "fail" in {
        "this" should equal ("that")
    }
}

更新:切换到Spec,问题解决了。我仍然更喜欢使用FlatSpec的ScalaTest,但这已经足够好了。可以运行的代码:

import org.specs._
object SampleTestSpec extends Specification {
    "'hello world' has 11 characters" in {
     "hello world".size must be equalTo(113)
  }
  "'hello world' matches 'h.* w.*'" in {
     "hello world" must be matching("h.* w.*")
  }
}

-teo


如果您提到了实际的版本号,那就太好了。 “最新版本”是一个不断变化的目标。 - akauppi
3
重要提示:根据情况,IntelliJ可能无法捕获使用ScalaTest编写的测试用例,例如FunSpec。请确保配置“运行配置”->“ScalaTest”,使组合框“测试种类”显示“包中的所有内容”。我的意思是:按此配置默认值,否则IntelliJ可能会或可能不会按照您期望的方式创建新配置。 - Richard Gomes
1
重要提示 #2:如果您正在使用SBT,请使用sbt-idea插件来生成IntelliJ所需的配置文件,以便在定义“运行配置”时使用。 - Richard Gomes
只需右键单击并运行测试,它不起作用吗? - Raman Mishra
10个回答

18
如果IntelliJ没有自动捕获测试,您可以执行以下操作:
在“运行配置”中,创建一个ScalaTest运行配置,并设置其“测试类型”为“包内全部”,将“测试包”设置为包含测试的包。

8
这对我起了帮助作用: 编辑配置 -> 测试类型:包中的所有内容。

4
我一直以这种方式运行它(但我发现它有点啰嗦,可能可以简化):
@RunWith(classOf[JUnitSuiteRunner])
class AuthorisationParserRunAsTest extends JUnit4(AuthorisationParserSpec)
object AuthorisationParserSpec extends Specification {
  ...
}

所以,我从ScalaTest转换到Specification,现在它可以正常工作了。我可以确认您不需要模板类或@RunWith:import org.specs._ object AuthorisationParserSpec extends Specification {将起作用。 - Matteo Caprari

2

ScalaTest提供了概述,介绍了所有可能的测试方式;我只是给所有测试类添加了注释。

@RunWith(classOf[JUnitRunner])

0
如果对任何人有帮助--我刚接触Scala,这是因为我构造测试类的方式有问题。我有:
class SomeTests extends FlatSpec {
  def aTest = {
    "This thing when that thing happens" should
    "return some particular response" in {
      // ... test body
    }
  }
}

问题在于我将测试放在了一个方法中,没有意识到在这种情况下,测试需要是裸的。
class SomeTests extends FlatSpec {

    "This thing when that thing happens" should
    "return some particular response" in {
      // ... test body
    }

}

0

我在运行FlatSpec中的单独测试时也遇到了“空测试套件”问题。我将根本原因缩小到了行为字符串开头处的空格。

例如,在以下代码中,第一个测试将运行,但第二个测试不会(如果单独运行)。这是由于行为字符串“not run”开头处有一个空格。如果将其删除并再次运行,则应该可以正常工作。

import org.scalatest.FlatSpec

class FlatSpecWhiteSpaceTest extends FlatSpec {
    "TestWithNoEmptySpace" should "run" in {
        runTest
    }

    "TestWithEmptySpace" should " not run" in {
        runTest
    }

    def runTest(): Unit = {
        val expectedValue = true
        val actualValue = true
        assert(expectedValue === actualValue)
    }
}
  • IDE: Intellij IDEA 2017.1C
  • Scala版本:2.11.8
  • ScalaTest版本:3.0.1

0

你需要在文件末尾加上Test,然后在测试配置中点击Run on Sbt


0

可能有点晚了,但我也遇到了同样的问题("空测试套件")。在 IDEA 的 bug 追踪器上挂了一段时间之后,我为自己的情况找到了一个解决方案:
我的 scala 版本是 2.9.0-1,而 scala-test 的版本是 2.8.*
scala-test 升级到最新版本(与 scala 相同)后,问题得以解决。


0

0
我已经能够在IntelliJ中运行FunSuite测试而没有任何问题。然而,当使用FlatSpec测试时,我发现如果要使用Ctrl+Shift+F10(即运行所有测试),则需要右键单击或将光标定位于实际的测试类定义上,以便正确执行所有定义的测试并避免令人沮丧的“空测试套件”错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接