背景
我创建了template-scala-project,其中包括其他便利设施,定义了配置FunctionalTest
和AcceptanceTest
(除了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/scala
和src/it/scala
是测试源。 IntelliJ在它们之间没有任何区别,我的意思是:测试源和集成测试源之间没有区别,......但是没关系。我需要的只是src/it/scala
被认为是测试源。它就是这样的。
但是,IntelliJ不会将src/ft/scala
识别为测试源; IntelliJ无法将src/at/scala
识别为测试源。
我已经检查过sbt-structure生成的XML文件,但我无法理解它背后的模式或逻辑。但是(显然!)src/ft/scala
和src/at/scala
应出现在<configuration id="test">
下,以便有资格被视为测试来源。
问题
为了测试上面的假设,我想强制src/ft/scala
出现在<configuration id="test">
下,在build.sbt
文件中使用“something”。我怎么能做到这一点?
答案 0 :(得分:0)
如果您希望将IntelliJ中的目录视为测试源目录,只需右键单击并选择http://example.com/android/tutorial/webview.html
这改变了你的项目结构配置,让IntelliJ知道测试就在那里。如果需要对这些资源进行适当标记,那么您的资源也是如此。
有了这样说,我想我并不是百分之百确定IntelliJ使用sbt是否会认识到并适当地运行它们,但我希望它能够实现。
答案 1 :(得分:0)
经过一些实验,我显然发现了一些效果很好的东西。我不能说我已经找到了解决方案,但至少它似乎按照我的预期工作:IntelliJ识别FunctionalTest
(测试)源和AcceptanceTest
(测试)源,就像它识别一样Test
来源和IntegrationTest
来源。
答案:
创建扩展Runtime
和Test
的配置。这样做,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