如何使用SBT在测试配置之间共享类

时间:2012-11-14 20:02:38

标签: scala sbt

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

  • 的src /
    • 接受/
      • 阶/
    • 它/
      • 阶/
    • 测试/
      • 阶/

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

中为测试提供“it”类

非常感谢提前。

4 个答案:

答案 0 :(得分:7)

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

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

extend部分表示编译的普通测试源将位于fun源的类路径中。在您的情况下,声明acceptance配置以扩展it配置:

lazy val AcceptanceTest = config("acceptance") extend(IntegrationTest)

答案 1 :(得分:3)

答案 2 :(得分:1)

SBT使用Maven default directory layout

它会识别低于src/test/scala的文件夹,以便与src/main/scala一起编译。

因此,如果您移动src/test/scala下的其他文件夹,SBT将编译它们,您可以在它们之间共享代码。 e.g:

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

运行sbt test将编译目录中的所有三个文件。因此,通过此Acceptance参考并可以创建一个新的IT类,例如。

答案 3 :(得分:0)

如果您想坚持使用预定义的配置而不是定义新的配置,并且由于TestIntegrationTest都扩展了Runtime(有人希望IntegrationTest扩展{ {1}}…),则可以使用以下内容:

Test

这应该将您在dependencyClasspath in IntegrationTest := (dependencyClasspath in IntegrationTest).value ++ (exportedProducts in Test).value 中定义的所有类放在Test类上。

相关问题