Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何使用SBT在测试配置之间共享类_Scala_Sbt - Fatal编程技术网

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

Scala 如何使用SBT在测试配置之间共享类,scala,sbt,Scala,Sbt,我已按照SBT文档中的说明设置测试配置。我有三种测试配置test、IntegrationTest和AcceptanceTest。我的src目录如下所示: src/ 接受/ 斯卡拉/ 它/ 斯卡拉/ 试验/ 斯卡拉/ 我的问题是,如何配置SBT以允许在这些配置之间共享类?示例:我在“it”配置中有一个类,用于简化数据库设置和拆卸。我在“acceptance”配置中的一个验收测试可以使用这个类。如何使“it”类可用于“验收”中的测试 非常感谢。SBT使用 它将识别src/test

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

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

非常感谢。SBT使用

它将识别
src/test/scala
下的文件夹,以便与
src/main/scala
一起编译

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

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

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

这里记录了一种方法:

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

lazy val FunTest = config("fun") extend(Test)
lazy val AcceptanceTest = config("acceptance") extend(IntegrationTest)
extend
部分意味着编译的正常测试源将位于
fun
源的类路径上。在您的情况下,声明
接受
配置以扩展
配置:

lazy val FunTest = config("fun") extend(Test)
lazy val AcceptanceTest = config("acceptance") extend(IntegrationTest)

如果您希望坚持使用预定义的配置,而不是定义新的配置,并且由于
Test
IntegrationTest
扩展
运行时
(人们希望
IntegrationTest
扩展
测试
),您可以使用以下选项:

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

##编辑:

由于@mjhoy:

lazy val DeepIntegrationTest = IntegrationTest.extend(Test)

这是唯一的办法吗?我确实喜欢不同配置提供的分离。我以这种方式构建它,这样sbt测试将运行单元测试,sbt it:test将运行集成测试,sbt验收:test将运行验收测试。没有其他方法可以让it类进入验收类路径?不,我不认为这是唯一的方法。您必须将自定义源路径和类路径添加到构建中。在
build.sbt
文件中添加
scalaSource-in-Test:=文件(“src/acceptance/scala”)
scalaSource-in-Test:=文件(“src/it/scala”)
,将在运行
Test
时编译这些路径。太棒了!这正是我想要的。谢谢。这肯定让我走上了正确的道路。这就是我最终的诀窍:
AcceptanceTest Seq中的非托管源目录(base/“src/acceptance/scala”,base/“src/it/scala.scala”)}
如何定义
AcceptanceTest
啊。。。这要简单得多。非常感谢。但它们也将作为测试运行和编译,所以您需要具有相同的类路径,这似乎不适合我。AcceptanceTest无法从IntegrationTest中找到类。从那以后有什么变化吗?上次当我发布一个没有好例子的url时,它被无情地删除了:)关于这一点的一个注释。这个解决方案不适用于我的VSCode/Metals集成(尽管sbt编译得很好)。我在这里找到了解决办法:这好多了!我使用“黑客”解决方案已经有一段时间了。也许当我第一次提出它时,
ConfigurationExtra.extend
没有实现?或者也许我到目前为止还不知道。无论如何,谢谢@mjoy!