我已按照 SBT 文档中的说明设置测试配置。我有三个测试配置Test、IntegrationTest 和AcceptanceTest。所以我的 src 目录如下所示:
- 源/
- 验收/
- 斯卡拉/
- 它/
- 斯卡拉/
- 测试/
- 斯卡拉/
- 验收/
我的问题是,如何配置 SBT 以允许在这些配置之间共享类?示例:我在“it”配置中有一个类,用于简化数据库设置和拆卸。我在“验收”配置中的验收测试之一可以使用此类。如何在“接受”中使该“it”类可用于测试
提前谢谢了。
配置可以扩展另一个配置以使用该配置的依赖项和类。例如,自定义测试配置部分显示了自定义配置的以下定义:
lazy val FunTest = config("fun") extend(Test)
这extend
部分意味着编译的正常测试源将位于fun
源的类路径中。在您的情况下,声明acceptance
配置以扩展it
配置:
lazy val AcceptanceTest = config("acceptance") extend(IntegrationTest)
如果您想坚持使用预定义的配置而不是定义新的配置,并且由于两者Test
和IntegrationTest
扩展Runtime
(人们希望IntegrationTest
扩展Test
......),您可以使用以下内容:
dependencyClasspath in IntegrationTest := (dependencyClasspath in IntegrationTest).value ++ (exportedProducts in Test).value
这应该将您定义的所有类Test
放在IntegrationTest
classpth 上。
##编辑:
感谢@mjhoy,我刚刚意识到更好的解决方案:
lazy val DeepIntegrationTest = IntegrationTest.extend(Test)
SBT 使用Maven 默认目录布局。
它将识别src/test/scala
要与src/main/scala
.
因此,如果您移动src/test/scala
SBT 下的其他文件夹,将编译它们并且您可以在它们之间共享代码。例如:
└── scala
├── acceptance
│ └── scala
│ └── Acceptance.scala
├── it
│ └── scala
│ └── IT.scala
└── Test.scala
运行sbt test
将编译目录中的所有三个文件。所以,有了这个Acceptance,就可以例如创建一个新的IT类。