Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sbt不区分提供给测试运行者的标志_Sbt - Fatal编程技术网

sbt不区分提供给测试运行者的标志

sbt不区分提供给测试运行者的标志,sbt,Sbt,目前: Sbt有多个测试运行程序:scalaTest、junit接口等 每个测试运行程序都有自己的一组标志(,) 您可以通过sbt将标志传递给测试运行程序,例如: $sbt'/test only*--f'(-f是scalaTest标志) 但是,即使某个标志与所有测试运行程序不兼容,这些标志似乎都会传递给所有测试运行程序 我也经历了与我在文档中发现的相反的行为。ScalaTest表示,-v标志将“打印ScalaTest版本”,junit接口表示将在日志级别“info”而不是“debug”上“记

目前:

  • Sbt有多个测试运行程序:scalaTest、junit接口等
  • 每个测试运行程序都有自己的一组标志(,)
  • 您可以通过sbt将标志传递给测试运行程序,例如:

    $sbt'/test only*--f'
    (-f是scalaTest标志)

但是,即使某个标志与所有测试运行程序不兼容,这些标志似乎都会传递给所有测试运行程序

我也经历了与我在文档中发现的相反的行为。ScalaTest表示,
-v
标志将“打印ScalaTest版本”,junit接口表示将在日志级别“info”而不是“debug”上“记录”测试运行已启动“/”测试已启动“/”测试运行已完成”事件。相反,ScalaTest抛出未识别的标志异常

$sbt'/仅测试*--v'

java.lang.IllegalArgumentException: Argument unrecognized by ScalaTest's Runner: -v
    at org.scalatest.tools.ArgsParser$.parseArgs(ArgsParser.scala:425)
    at org.scalatest.tools.Framework.runner(Framework.scala:929)
    ...
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
[error] (elasticSearchDriver/test:testOnly) java.lang.IllegalArgumentException: Argument unrecognized by ScalaTest's Runner: -v
[error] Total time: 1 s, completed Aug 15, 2017 11:12:56 AM
问题: 通过sbt传递给测试运行者的标志的实际底层行为是什么?是否有一些文档可以解释正在发生的事情?

通过查看SBT(0.13.x),我们最终得出一个部分:

  def inputTests(key: InputKey[_]): Initialize[InputTask[Unit]] = inputTests0.mapReferenced(Def.mapScope(_ in key.key))
  private[this] lazy val inputTests0: Initialize[InputTask[Unit]] =
    {
      val parser = loadForParser(definedTestNames)((s, i) => testOnlyParser(s, i getOrElse Nil))
      Def.inputTaskDyn {
        val (selected, frameworkOptions) = parser.parsed
        val s = streams.value
        val filter = testFilter.value
        val config = testExecution.value

        implicit val display = Project.showContextKey(state.value)
        val modifiedOpts = Tests.Filters(filter(selected)) +: Tests.Argument(frameworkOptions: _*) +: config.options
        val newConfig = config.copy(options = modifiedOpts)
        val output = allTestGroupsTask(s, loadedTestFrameworks.value, testLoader.value, testGrouping.value, newConfig, fullClasspath.value, javaHome.value, testForkedParallel.value, javaOptions.value)
        val taskName = display(resolvedScoped.value)
        val trl = testResultLogger.value
        val processed = output.map(out => trl.run(s.log, out, taskName))
        Def.value(processed)
      }
    }
注意这一行:
Tests.Filters(filter(selected))+:Tests.Argument(frameworkOptions:*)+:config.options

通过阅读本文,我推断sbt将您传递给它的参数传递给所有底层测试框架

解决方案 不要在命令中传递测试框架标志。在
*.sbt
文件中配置它们,如:

Test+=Tests.Argument(TestFrameworks.ScalaCheck,“-f”)