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