【问题标题】:How Can I Share Code Between Integration Tests and Unit Tests如何在集成测试和单元测试之间共享代码
【发布时间】:2021-03-13 04:34:53
【问题描述】:

对于我的测试,我创建了一个对象,其中包含我的所有案例类的任意实例(即我的生成器):


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 文件夹中的测试共享的最佳方式是什么?

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

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    基于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 构建并将通用测试代码分解到它自己的项目中,也许是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
      )
    

    【讨论】:

      猜你喜欢
      • 2020-03-03
      • 1970-01-01
      • 2021-06-23
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多