IntelliJ(或sbt-structure)如何识别测试源?

时间:2018-05-05 12:57:57

标签: scala intellij-idea sbt

背景

我创建了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中的行为

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

  

英尺:测试

一切都按照我的计划进行。我甚至可以将测试源分享到它的来源,或 ft来源,或来源 ...这是一个共同的实际要求。

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”。我怎么能做到这一点?

2 个答案:

答案 0 :(得分:0)

如果您希望将IntelliJ中的目录视为测试源目录,只需右键单击并选择http://example.com/android/tutorial/webview.html

即可对其进行配置

这改变了你的项目结构配置,让IntelliJ知道测试就在那里。如果需要对这些资源进行适当标记,那么您的资源也是如此。

有了这样说,我想我并不是百分之百确定IntelliJ使用sbt是否会认识到并适当地运行它们,但我希望它能够实现。

答案 1 :(得分:0)

经过一些实验,我显然发现了一些效果很好的东西。我不能说我已经找到了解决方案,但至少它似乎按照我的预期工作: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