SBT 无法找到 运行 的测试也无法编译

SBT can't find tests to run nor compile

正如标题所说,我有一个只有一个模块的 sbt 项目(目前),但是 test:compile 没有发现任何语法错误(并且测试没有找到 运行).按照我的理解,一个 sbt 项目带有 src/main 和 src/test(需要配置 src/it)。我对 SBT 有点业余,但我会尽量提供所有相关信息:

结构:

Root
  build.sbt
  mymodule
    build.sbt
    src
      main
        scala
      test
        scala 

Root build.sbt(我认为这些配置是不必要的,但我很绝望):

lazy val `mymodule` = (project in file("mymodule"))
  .configs(Test)
  .settings(scalaSource in Test := baseDirectory.value / "test")

MyModule build.sbt 基本上只是一个 libraryDependencies 的列表(除非其中一个是问题,不确定)像这样:

libraryDependencies ++= Seq(
  "org.mockito" % "mockito-all" % "1.9.5" % "test",
  "org.scalamock" %% "scalamock-core" % scalaMockVersion % "test",
  "org.scalamock" %% "scalamock-scalatest-support" % scalaMockVersion % "test",
  "org.codehaus.janino" % "janino" % "2.7.8",
  "org.http4s" %% "http4s-dsl" % "0.11.2",
  "org.http4s" %% "http4s-blaze-server" % "0.11.2",
  "junit" % "junit" % "4.8.1" % "test" // Here because of a bug in Ivy
)

让我知道我还能做些什么来帮助,真是绞尽脑汁。

连线

scalaSource in Test := baseDirectory.value / "test"

您已将 sbt 配置为在位置 Root/mymodule/test(而不是在默认位置 <base>/src/test/scala)查找测试源。

因此,您的选择是 (i) 将测试放在 Root/mymodule/test 内,(ii) 或删除该配置行,将测试留在默认位置。

我可以看到这个问题已经解决了,但我发生这种情况的原因完全不同。我通过添加 sbt 插件并启用它,将播放框架添加到现有项目中,然后我的测试停止了 运行ning。可能该项目也没有编译,但我没有注意到,因为测试没有 运行。 play framework sbt 插件似乎与源目录混淆,我必须这样做才能恢复原状:

lazy val root = (project in file("."))
  .enablePlugins(PlayService, PlayLayoutPlugin)
  .settings(
    name := "Coffee",
    scalaSource in Test := baseDirectory.value / "src/test/scala",
    scalaSource in Compile := baseDirectory.value / "src/main/scala"
  )

看起来很粗鲁!

我用命令sbt clean compile

解决