Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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
Unit testing SBT不';t在自定义测试配置中运行任何Specs2测试_Unit Testing_Sbt_Specs2 - Fatal编程技术网

Unit testing SBT不';t在自定义测试配置中运行任何Specs2测试

Unit testing SBT不';t在自定义测试配置中运行任何Specs2测试,unit-testing,sbt,specs2,Unit Testing,Sbt,Specs2,我有一个多项目,它们之间共享一些设置和自定义配置。这些设置是应按标记运行Specs2测试的配置。但是,当我运行这些新配置时,它们根本没有运行任何测试 import sbt.TestFrameworks.Specs2 import sbt.Tests.Argument import sbt._ import sbt.Keys._ trait Settings extends Dependencies { lazy val FunctionalTest = config("functiona

我有一个多项目,它们之间共享一些设置和自定义配置。这些设置是应按标记运行Specs2测试的配置。但是,当我运行这些新配置时,它们根本没有运行任何测试

import sbt.TestFrameworks.Specs2
import sbt.Tests.Argument
import sbt._
import sbt.Keys._

trait Settings extends Dependencies {

  lazy val FunctionalTest = config("functional") extend(Test)

  val commonConfigs = Seq(FunctionalTest)

  val commonSettings =
    inConfig(FunctionalTest)(Defaults.testSettings) ++
    Seq(
      libraryDependencies ++= mainDeps,
      libraryDependencies ++= testDeps map (_ % "test"),

      testOptions in Test += Argument(Specs2, "exclude", TestTag.FunctionalTest),
      testOptions in FunctionalTest += Argument(Specs2, "include", TestTag.FunctionalTest)
    )
}
像这样定义
functional:test
任务后,它不会运行任何测试,而
test
任务将运行所有子项目中未标记为
TestTag.FunctionalTest
的所有测试

移除FunctionalTest+=参数中的
testOptions(Specs2,“include”,TestTag.FunctionalTest)
不会改变结果,但是移除
inConfig(FunctionalTest)(Defaults.testSettings)++
make
functional:test
的行为与
test
完全相同(运行
TestTag.FunctionalTest
之外的所有操作)


如何使
test
运行除
TestTag.FunctionalTest
标记的测试(现在是这样)和
functional:test
之外的所有测试以仅运行标记的测试?我查看了SBT和Spec2文档,但它们只有按名称筛选测试(SBT)或使用命令行参数筛选测试(Specs2)的工作示例,我找不到关于如何组合它们的信息。

为了让一切都按我所希望的方式工作,我必须设置一些东西。最终解决方案如下所示:

trait Settings extends Dependencies {

  lazy val FunctionalTest = config("functional") extend(Test)

  val commonConfigs = Seq(FunctionalTest)

  val functionalSettings =
    inConfig(FunctionalTest)(Defaults.testTasks) ++
    Seq(testOptions in FunctionalTest := Argument(Specs2, "include", TestTag.FunctionalTest))

  val commonSettings =
     ++
    Seq(
      libraryDependencies ++= mainDeps,
      libraryDependencies ++= testDeps map (_ % "test"),

      testOptions in Test += Argument(Specs2, "exclude", TestTag.FunctionalTest)
    )
}
用作:

project.
  configs(commonConfigs).
  settings(functionalSettings: _*).
  settings(commonSettings: _*)
为了使其按我的预期工作,我必须解决的问题:

  • 将设置拆分为几个步骤:

    当我通过连接设置并应用
    project.settings(allSettingsAtOnce:*)
    创建了一大批设置时,一切都会崩溃。分离它们是使
    功能化的第一步:test
    工作。它还允许我应用fix#3,因为在创建设置序列时,
    testOptions:=option
    不可用

  • Defaults.testSettings
    替换为
    Defaults.testTasks

    使用
    inConfig(FunctionalTest)(Defaults.testSettings)
    未运行任何测试。任务在启动后立即成功,没有来自测试框架的任何报告

  • 将FunctionalTest+=option中的
    testOptions替换为FunctionalTest:=options中的
    testOptions

    +=
    中,我同时得到了
    排除函数性
    包含函数性
    测试框架参数。我猜当我将参数附加到
    Test
    时,它会自动传播到扩展它的所有内容,因此在派生配置中有两个相互冲突的参数。通过
    :=
    我摆脱了不必要的参数,事情又开始了

  • 我发现的这些怪癖并没有在文档中描述过,解决方案是将我发现的几个问题的解决方案放在一起并进行大量尝试的结果