gpt4 book ai didi

scala - 如何在集成测试和单元测试之间共享代码

转载 作者:行者123 更新时间:2023-12-02 00:00:54 24 4
gpt4 key购买 nike

为了我的测试,我创建了一个对象,它包含我所有的案例类的 Arbitrary 实例(即我的生成器):


object Generators
extends
FooGen
{


def sample[A](implicit gen: Gen[A]): A =
gen.sample.getOrElse(sys.error(s"Could not generate instance with $gen"))

implicit def arb[A](implicit g: Gen[A]): Arbitrary[A] = Arbitrary(g)

}

trait FooGen { this: GenUtils =>

implicit val fooGen: Gen[Foo] = gen[Foo]

}

它目前位于我的/test 文件夹下,因为我需要它来为我的单元测试生成我的案例类的任意实例。但现在我想创建一些集成测试,这些测试将位于我的/it 文件夹下。将/test 文件夹中的此生成器文件与/it 文件夹中的测试共享的最佳方式是什么?

我的所有案例类都会有很多这样的生成器,所以我不想重复代码,所以这就是我问的原因。

最佳答案

基于 gilad hoch's answer尝试

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

例如你的build.sbt可能看起来像

lazy val root = (project in file("."))
.configs(IntegrationTest)
.settings(
Defaults.itSettings,
libraryDependencies += scalaTest % "it,test",
IntegrationTest / dependencyClasspath :=
(IntegrationTest / dependencyClasspath).value ++ (Test / exportedProducts).value
)

目录结构

├── it
│   └── scala
│   └── example
│   └── GoodbyeSpec.scala
├── main
│   └── scala
│   └── example
│   └── Hello.scala
└── test
└── scala
└── example
├── FooGen.scala
└── HelloSpec.scala

现在可以从 GoodbyeSpec.scala 访问 FooGen.scala

另一种选择是创建 multi-project构建公共(public)测试代码并将其提取到自己的项目中,可能是 test-common,然后拥有主项目 depend在上面

lazy val core = (project in file("core"))
.dependsOn(testCommon)
.settings(
// other settings
)

lazy val testCommon = (project in file("testCommon"))
.settings(
// other settings
)

关于scala - 如何在集成测试和单元测试之间共享代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61772652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com