【问题标题】:Pass arguments to a specific test framework when using test-only with SBT在 SBT 中使用仅测试时将参数传递给特定的测试框架
【发布时间】:2017-01-13 07:16:43
【问题描述】:

我有一个使用几个测试框架(ScalaTest 和 ScalaCheck)的 SBT 项目。在大多数情况下,这只是按预期工作。例如。 running test 运行两种测试变体。

libraryDependencies ++= Seq(
  ...
  "org.scalatest"    %% "scalatest"    % "2.2.4"  % "test",
  "org.scalacheck"   %% "scalacheck"   % "1.12.5" % "test"
)

但是,在运行 test-only 时,当我尝试向 ScalaCheck 提供参数时,ScalaTest 会介入并抱怨:

test-only *SomeProp -- -s 10

[错误] (test:testOnly) java.lang.IllegalArgumentException: 指定 套件 (-s ) 或嵌套套件 (-i ) 不是 从 sbt 运行 ScalaTest 时支持;请使用 sbt 的 test-only 而是。

在上面的例子中,ScalaTest 是用 -s 参数而不是 ScalaCheck 调用的。

通过查看 ScalaTest 的测试指纹:

superclass is "org.scalatest.Suite" or annotated with: "org.scalatest.WrapWith"

和 ScalaCheck:

superclass is either "org.scalacheck.Properties" or "org.scalacheck.Prop"

我认为 SBT 对于给定类型的测试运行哪个框架应该没有混淆,给定上述指纹。 (*SomeProps 变体扩展了 org.scalacheck.P​​roperties。)

我有什么方法可以指定使用 test-only 调用哪个测试框架?如果不需要,我是否需要配置 SBT 以在不同的配置下运行 ScalaTest 和 ScalaCheck?

【问题讨论】:

    标签: scala sbt scalatest scalacheck


    【解决方案1】:

    我设法通过为基于属性的测试 (ScalaCheck) 创建单独的配置来实现此功能。我在下面解释了对 build.sbt 的更改。

    我将 ScalaTest 作为 test 配置中的“默认”测试框架:

    libraryDependencies ++= Seq(
      ...
      "org.scalatest"    %% "scalatest"    % "2.2.4"  % "test"
    )
    

    我创建了一个单独的 prop 配置来运行 ScalaCheck 属性。我不得不将所有基于属性的测试从 src/test/scala 移到 src/prop/scala。我还将我的 ScalaCheck 依赖范围限定为 prop 配置。这使得它仅在 prop 配置中使用时可用。同样,ScalaTest 只能在 test 配置中使用。

    lazy val root =
      Project("root", file(".")).
        configs(Prop).
        settings(inConfig(Prop)(Defaults.testSettings)).
        settings(libraryDependencies += scalacheck)
    
    lazy val Prop = config("prop") extend (Runtime)
    
    lazy val scalacheck = "org.scalacheck"   %% "scalacheck"   % "1.12.5" % "prop"
    

    现在我可以使用参数运行 ScalaTest 和 ScalaCheck,而不会出现任何问题。所以基本上 testtest-only 运行 ScalaTest 而 prop:testprop:test-only 运行 ScalaCheck。

    test-only *Spec -- -z "some content" //runs only ScalaTest
    
    prop:test-only *SomeProp -- -s 10 //runs only ScalaCheck
    

    有关如何设置测试配置的更多信息,请参阅SBT documentation

    唯一的缺点是我不能运行 test 来运行所有的测试了。我不得不求助于:

    ;test;prop:test
    

    为上面创建一个别名会让事情变得更容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-27
      • 1970-01-01
      • 2021-05-25
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多