【问题标题】:How IntelliJ (or sbt-structure) identifies test sources?IntelliJ(或 sbt-structure)如何识别测试源?
【发布时间】:2018-05-08 04:29:21
【问题描述】:

背景

我创建了template-scala-project,其中定义了配置FunctionalTestAcceptanceTest(除了IntegrationTest,它由SBT 提供)。

这样,目录结构的相关位是:

src/main/scala - compile sources - Compile
src/test/scala - test sources - Test
src/it/scala - it sources - IntegrationTest
src/ft/scala - ft sources - FunctionalTest
src/at/scala - at sources - AcceptanceTest

SBT 中的行为

我只能运行功能测试,例如,像这样:

英尺:测试

一切都按我的计划进行。我什至可以将 test sources 分享给 it sources,或 ft sources,或 at sources...一个常见的实际要求。

IntelliJ 中的行为

IntelliJ 识别 src/test/scalasrc/it/scala 是测试源。 IntelliJ 之间没有任何区别,我的意思是:测试源和集成测试源之间没有区别,......但没关系。我只需要src/it/scala 被识别为测试源。它就是这样工作的。

但是,IntelliJ 无法将 src/ft/scala 识别为测试源; IntelliJ 无法将 src/at/scala 识别为测试源。

我检查了 sbt-structure 生成的 XML 文件,但我无法理解其背后的模式或逻辑。但是(显然!)src/ft/scalasrc/at/scala 应该出现在 <configuration id="test"> 下,以便有资格被视为测试源。

问题

为了验证我上面的假设,我想强制src/ft/scala 出现在<configuration id="test"> 下,在build.sbt 文件中使用“something”。我怎样才能做到这一点?

【问题讨论】:

  • 请在 YouTrack 上报告问题:youtrack.jetbrains.com/issues/SCL
  • @y.bedrov:显然我找到了一种“让它发挥作用”的方法。详细信息在我的回答中。非常感谢,

标签: scala intellij-idea sbt


【解决方案1】:

如果您希望将 IntelliJ 中的目录视为测试源目录,只需右键单击它并选择 Mark Directory As > Test Sources Root 即可对其进行配置

这会更改您的项目结构配置,让 IntelliJ 知道测试驻留在那里。如果您的资源需要适当地标记,也是如此。

话虽如此,我想我不能 100% 确定 IntelliJ 对 sbt 的使用是否会识别并正确运行它们,但我希望它会。

【讨论】:

  • 非常感谢您的友好留言。我知道你提到的指示。但是,我想获得正确的东西,而不必在 IntelliJ 中强制执行任何操作。如果 SBT 知道它并且 IntelliJ 与 SBT 集成,那么 IntelliJ 应该正确理解 SBT。不......不幸的是,每次您重新打开项目或刷新 build.sbt 时,IntelliJ 都会“忘记”这些手动设置。
【解决方案2】:

经过一些实验,我显然发现了一些效果很好的东西。我不能声称我找到了解决方案,但至少它似乎像我预期的那样工作:IntelliJ 识别FunctionalTest(测试)源和AcceptanceTest(测试)源,它识别Test 源的方式相同和IntegrationTest 来源。

答案:

创建一个扩展 RuntimeTest 的配置。这样,src/ft/scala 将出现在<configuration id="test"> 下,因为 XML 文件是由sbt-structure 生成的。配置见下例FunctionalTest

lazy val FunctionalTest = Configuration.of("FunctionalTest", "ft") extend (Runtime, Test)

作为奖励,我在下面展示了一些我认为与配置FunctionalTest相关联有用的其他设置:

lazy val forkSettings: Seq[Setting[_]] =
  Seq(
    fork in ThisScope := false,
    parallelExecution in ThisScope := false,
  )

lazy val ftSettings: Seq[Setting[_]] =
  inConfig(FunctionalTest)(Defaults.testSettings ++ forkSettings ++
    Seq(
      unmanagedSourceDirectories   in FunctionalTest ++= (sourceDirectories   in Test).value,
      unmanagedResourceDirectories in FunctionalTest ++= (resourceDirectories in Test).value,
    ))

我也为配置AcceptanceTest做了类似的事情。

您可以在以下位置找到一个练习此类配置的项目: http://github.com/frgomes/template-scala-project

【讨论】:

    猜你喜欢
    • 2012-12-04
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 2019-01-16
    • 1970-01-01
    • 2014-06-16
    相关资源
    最近更新 更多