SBT:覆盖任务的行为"测试"要仅运行默认testSource文件夹中的测试,有多个测试源文件夹

时间:2017-09-08 16:40:40

标签: scala sbt typesafe-activator

我们有标准目录结构的标准SBT项目。

test 文件夹包含所有JUnit测试。

我们引入了一个新文件夹 othertests ,文件夹 othertests 与文件夹 测试

othertest 文件夹包含一些特殊的测试用例。文件夹 othertest 中的测试类名称可以很容易地与普通的JUnit测试区分开来。

以下是我的build.sbt配置。

我已使用javaSources in Test SBT任务在测试源中添加了文件夹 othertest

我们正在使用 激活器 来运行测试并执行其他操作。

当我运行activator> test时,我希望仅运行 test 文件夹中的所有测试,并且我想从文件夹 othertests 。另外。

问题。

  1. 如何覆盖测试任务的行为以从文件夹 othe emsts
  2. 过滤掉测试
  3. 我应该创建共享模块来单独运行正常的junit测试和单独运行其他junit测试。
  4. 以下是我的build.sbt配置

    import java.io.PrintStream
    
    import play.sbt.PlayJava
    import play.twirl.sbt.Import._
    
    name := "Service"
    
    version := "5.1.0"
    
    scalaVersion := "2.11.8"
    
    routesGenerator := InjectedRoutesGenerator
    
    lazy val ContractTest = config("contract") extend(Test)
    
    def contractTestFilter(name: String): Boolean = name endsWith "ContractTest"
    
    def ignoreContractTest(name: String): Boolean = !contractTestFilter(name)
    
    lazy val root = (project in file("."))
      .enablePlugins(PlayJava)
      .configs(ContractTest)
        .settings(
          inConfig(ContractTest) (Defaults.testTasks),
          javaSource in Test := { (baseDirectory in Test) (_ / "contracttest") }.value,
          testOptions in ContractTest := Seq(Tests.Filter(contractTestFilter),Tests.Argument(TestFrameworks.JUnit, "-q", "-v", "-s")),
          testOptions in Test := Seq(Tests.Filter(ignoreContractTest),Tests.Argument(TestFrameworks.JUnit, "-q", "-v", "-s"))
        )
    
    lazy val xyz = taskKey[Unit]("custom task to create loglayout jar file under lib folder")
    
    xyz := {
      LogLayoutJar.build(scalaBinaryVersion.value, streams.value.log)
    }
    
    run := (run in Runtime).dependsOn(xyz).evaluated
    
    javaOptions in Test ++= Seq("-Dconfig.resource=applic.tt.cnf")
    
    libraryDependencies ++= Seq(
      json,
      javaWs,
      "org.mockito" % "mockito-all" % "1.10.19" % Test,
      "org.scalatestplus.play" %% "scalatestplus-play" % "1.5.1" % Test,
      "org.easytesting" % "fest-assert" % "1.4" % Test,
      "org.scalactic" %% "scalactic" % "2.2.0",
      "org.jmockit" % "jmockit" % "1.9" % Test,
      "com.portingle" % "slf4jtesting" % "1.0.0" % Test,
      "org.scalacheck" %% "scalacheck" % "1.12.6" % Test
    )
    
    resolvers ++= Seq(
      "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
    )
    
    parallelExecution in Test := runningTestInParallel
    
    testGrouping in Test := groupByModule((externalDependencyClasspath in Test).value,
      (definedTests in Test).value, streams.value.log)
    
    javacOptions ++= Seq(
      "-Xlint:unchecked",
      "-Xlint:deprecation"
    )
    scalacOptions ++= Seq(
      "-feature",
      "-language:implicitConversions",
      "-deprecation"
    )
    
    // Custom tasks //
    val silenceSystemErr = taskKey[Unit]("Replaces System.err with a PrintStream to nowhere.")
    
    silenceSystemErr := {
      System.setErr(new PrintStream(new DevNull))
      println("Messages System.err will not be printed.")
    }
    
    val restoreSystemErr = taskKey[Unit]("Restores the original System.err")
    
    restoreSystemErr := {
      System.setErr(systemErr)
      println("Messages System.err will be printed.")
    }
    

    从jenkins我们使用以下命令运行测试 -

    bin/activator -Dsbt.log.noformat=true -Denvironment_name=test -DsuppressLogging=true clean silenceSystemErr jacoco:cover
    

    谢谢 勒凯什

1 个答案:

答案 0 :(得分:1)

1

你自相矛盾。如果您在运行javaSources in Test命令时不希望它们运行,为什么要添加Test

您应该创建[扩展Test的[附加测试配置| http://www.scala-sbt.org/0.13/docs/Testing.html#Additional+test+configurations]并仅在othertests文件夹中运行测试。

2

您可以创建另一个模块。我个人不喜欢这个想法因为那时我必须根据它测试的内容命名模块,我有两个独立的模块,实际上只应该是一个。

如果测试中有一些依赖项会降低模块的总体构建时间,那么单独的测试模块可能是个好主意。例如,想象一下带有Gatling性能测试的Java项目。如果性能测试在同一个模块中,那么每当我rebuild它时,它也会rebuild需要scala编译器的加速测试更慢。

有些人可以忍受这个,我就是其中之一。我更喜欢在同一个项目中进行测试,并且在重建模块时可能会遭受时间损失。这很少发生我在需要时创建不同的测试配置。

为测试选择单独模块的另一个原因是,当您的测试依赖于多个模块并且您不希望在编译时该模块依赖于src代码。

某些IDE和/或语言可能会鼓励使用单独的模块进行测试,因为我理解C#和Visual Studio的情况(但我可能在这里错了,不要相信我的话)。

相关问题