【问题标题】:Sbt hook for custom µtest test runner用于自定义 µtest 测试运行器的 Sbt 挂钩
【发布时间】:2016-04-14 00:52:03
【问题描述】:

我在 Scala sbt 项目中使用µtest。我想用一个定制的测试运行器运行各种测试类,它由这样的代码组成

val results = AnotherClassWithTests.myTests.run()
println(results.leaves.count(_.value.isSuccess))

我希望它在运行 sbt test 时执行,我发现的唯一方法是 extend utest.Testsuite 并将 tests 方法留空。

这样,sbt 会找到类并运行它,但解决方案似乎并不理想。我可以通过不扩展 utest.Testsuite 来阻止 sbt 的运行器执行 AnotherClassWithTests,但我仍然会从 µtests 默认测试运行器以及我自己的输出中获得不必要的输出。

如何在没有这种 hack 的情况下将我的跑步者连接到 sbt test 并使用它运行我的所有测试,跳过 µtests 默认跑步者?

我也可以访问 sbt 检测到的 µ-tests 列表吗?

【问题讨论】:

    标签: scala testing sbt scala.js utest


    【解决方案1】:

    您可以完全覆盖test 任务的行为,只需执行您的主类。灵感来自https://github.com/scala-js/scala-js/blob/v0.6.5/sbt-plugin/src/main/scala/scala/scalajs/sbtplugin/ScalaJSPluginInternal.scala#L547-L549

    /** Run a class in a given environment using a given launcher */
    def jsRun(env: JSEnv, cp: CompleteClasspath, mainCl: String,
        launcher: VirtualJSFile, jsConsole: JSConsole, log: Logger) = {
    
      log.info("Running " + mainCl)
      log.debug(s"with JSEnv of type ${env.getClass()}")
      log.debug(s"with classpath of type ${cp.getClass}")
    
      // Actually run code
      env.jsRunner(cp, launcher, log, jsConsole).run()
    }
    
    def launcherContent(mainCl: String) = {
      val parts = mainCl.split('.').map(s => s"""["${escapeJS(s)}"]""").mkString
      s"${CoreJSLibs.jsGlobalExpr}$parts().main();\n"
    }
    
    def memLauncher(mainCl: String) = {
      new MemVirtualJSFile("Generated launcher file")
        .withContent(launcherContent(mainCl))
    }
    
    test in Test := {
      val mainClass = "path.to.AnotherClassWithTests"
      jsRun((jsEnv in Test).value, (scalaJSExecClasspath in Test).value, mainClass,
          memLauncher(mainClass), (scalaJSConsole in Test).value, streams.value.log)
    }
    

    要获取已检测到的测试列表,您可以使用 sbt 任务(definedTests in Test).value,或者可能使用(definedTestNames in Test).value

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-16
      • 2016-06-22
      • 2022-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      相关资源
      最近更新 更多