19

我已按照 SBT 文档中的说明设置测试配置。我有三个测试配置Test、IntegrationTest 和AcceptanceTest。所以我的 src 目录如下所示:

  • 源/
    • 验收/
      • 斯卡拉/
    • 它/
      • 斯卡拉/
    • 测试/
      • 斯卡拉/

我的问题是,如何配置 SBT 以允许在这些配置之间共享类?示例:我在“it”配置中有一个类,用于简化数据库设置和拆卸。我在“验收”配置中的验收测试之一可以使用此类。如何在“接受”中使该“it”类可用于测试

提前谢谢了。

4

4 回答 4

13

配置可以扩展另一个配置以使用该配置的依赖项和类。例如,自定义测试配置部分显示了自定义配置的以下定义:

lazy val FunTest = config("fun") extend(Test)

extend部分意味着编译的正常测试源将位于fun源的类路径中。在您的情况下,声明acceptance配置以扩展it配置:

lazy val AcceptanceTest = config("acceptance") extend(IntegrationTest)
于 2012-11-16T15:24:32.520 回答
10

如果您想坚持使用预定义的配置而不是定义新的配置,并且由于两者TestIntegrationTest扩展Runtime(人们希望IntegrationTest扩展Test......),您可以使用以下内容:

dependencyClasspath in IntegrationTest := (dependencyClasspath in IntegrationTest).value ++ (exportedProducts in Test).value

这应该将您定义的所有类Test放在IntegrationTestclasspth 上。

##编辑:

感谢@mjhoy,我刚刚意识到更好的解决方案:

lazy val DeepIntegrationTest = IntegrationTest.extend(Test)
于 2019-04-28T12:16:30.587 回答
2

此处记录了一种方法:http ://www.scala-sbt.org/release/docs/Detailed-Topics/Testing#additional-test-configurations-with-shared-sources

于 2012-11-14T21:53:09.070 回答
1

SBT 使用Maven 默认目录布局

它将识别src/test/scala要与src/main/scala.

因此,如果您移动src/test/scalaSBT 下的其他文件夹,将编译它们并且您可以在它们之间共享代码。例如:

└── scala
    ├── acceptance
    │   └── scala
    │       └── Acceptance.scala
    ├── it
    │   └── scala
    │       └── IT.scala
    └── Test.scala

运行sbt test将编译目录中的所有三个文件。所以,有了这个Acceptance,就可以例如创建一个新的IT类。

于 2012-11-14T20:25:37.610 回答