【问题标题】:How do I run specific scala-test in sbt cross compile platforms?如何在 sbt 交叉编译平台中运行特定的 scala-test?
【发布时间】:2019-08-25 22:11:19
【问题描述】:

我有带有许多模块(Android、Scalajs、Native、JVM 和共享)的 sbt 交叉编译平台我想通过 build.sbt 文件通过向每个测试写入标志来控制每个模块的测试,例如:我想测试Android 模块和 Jvm,所以我将标志设置为 true,其他设置为 false:

//Testing flags
val androidQuickTest = true
val jvmQuickTest = true
val scalaJsQuickTest = false
val nativeQuickTest = false
val sharedQuickTest = false

那么我应该对这些标志添加一些控制和检查,并从 sbt shell 调用测试命令。

我的build.sbt 文件:

name := "CrossCompilePlatforms"

version := "0.1"

import sbtcrossproject.CrossPlugin.autoImport.{crossProject, CrossType}

val sharedSettings = Seq(scalaVersion := "2.11.12",
  libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.5" % "test"
)

val commonAndroidSettings = Seq(
  scalaVersion := "2.11.8",
  sbtVersion := "0.13.13",
  scalacOptions += "-target:jvm-1.7",
  javacOptions ++= Seq("-source", "1.7", "-target", "1.7"),
  exportJars := true
)

val commonNativeSettings = Seq(
  scalaVersion := "2.11.12",
  nativeLinkStubs := true,
  libraryDependencies += "org.scalatest" % "scalatest_native0.3_2.11" % "3.2.0-SNAP10"
)

lazy val myProject =

  crossProject(JSPlatform, JVMPlatform)
    .crossType(CrossType.Full)
    .settings(sharedSettings)
    .settings(libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.5" % "test")
    .jsSettings(libraryDependencies += "org.querki" %%% "jquery-facade" % "1.2")
    .jvmSettings()

lazy val myProjectJS = myProject.js.dependsOn(myProjectShared)
lazy val myProjectVM = myProject.jvm.dependsOn(myProjectShared)

lazy val myProjectNativeWin10 = project.in(file("./myProject/nativeWin10"))
  .settings(sharedSettings)
  .dependsOn(myProjectShared)

lazy val myProjectNativeUbuntu18 = project.in(file("./myProject/nativeUbuntu18"))
  .enablePlugins(ScalaNativePlugin)
  .settings(commonNativeSettings)

lazy val myProjectShared = project.in(file("./myProject/shared"))
  .settings(sharedSettings)

lazy val myProjectAndroid = project.in(file("./myProject/android"))
  .settings(commonAndroidSettings: _*)
  .settings(
    target := baseDirectory.value / ".android" / "target"
  )
  .dependsOn(myProjectShared)

【问题讨论】:

    标签: scala sbt scalatest sbt-crossproject


    【解决方案1】:

    我知道的两件事是:

    使用过滤器:

    lazy val FunTest = config("fun") extend(Test)
    
    def funTestFilter(name: String): Boolean = ((name endsWith "ItTest") || (name endsWith "IntegrationTest"))
    def unitTestFilter(name: String): Boolean = ((name endsWith "Test") && !funTestFilter(name))
    
    lazy val root = project in file(".") configs(FunTest) settings( inConfig(FunTest)(Defaults.testTasks) : _*)
    
    testOptions in FunTest := Seq(Tests.Filter(funTestFilter))
    
    testOptions in Test := Seq(Tests.Filter(unitTestFilter))
    

    来自https://stackoverflow.com/a/25853923/2750966

    使用标记:

    "The Scala language" must "add correctly" taggedAs(Android) in {
      val sum = 1 + 1
      assert(sum === 2)
    }
    

    来自ScalaTest Documentation

    【讨论】:

      猜你喜欢
      • 2019-07-22
      • 2020-02-04
      • 2019-09-27
      • 2011-01-21
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多