当前位置: 首页 > 知识库问答 >
问题:

ScalaTest:没有为生成器驱动的属性检查运行任何测试

郦何平
2023-03-14

我正在尝试使用斯卡拉测试和斯卡拉检查设置基于属性的测试...根据预测,似乎我正在成功,但它需要太快了,从我通常的理解来看,ScalaCheck应该告诉你测试是如何运行的,在我的情况下,这些信息是不存在的:

[IJ]sbt:algorithms2_1> testOnly *MedianOf3PartitioningProps
[info] Compiling 1 Scala source to /Users/vasile.gorcinschi/gitPerso/Algorithms/Chapter 2 Sorting/algorithms2_1/target/scala-2.12/test-classes ...
[warn] there was one deprecation warning; re-run with -deprecation for details
[warn] one warning found
[info] Done compiling.

[info] MedianOf3PartitioningProps:
[info] sort
[info] - should sort array of ints from 0 to 100
[info]   +  
[info] ScalaTest
[info] Run completed in 412 milliseconds.
[info] Total number of tests run: 1
[info] Suites: completed 1, aborted 0
[info] Tests: succeeded 1, failed 0, canceled 0, ignored 0, pending 0
[info] All tests passed.
[info] Passed: Total 1, Failed 0, Errors 0, Passed 1

下面是测试类:

class MedianOf3PartitioningProps extends FlatSpec with Matchers with GeneratorDrivenPropertyChecks with Gens {

  private val medianOf3Partitioning = new MedianOf3Partitioning[Int]

  implicit override val generatorDrivenConfig: PropertyCheckConfiguration = PropertyCheckConfig(minSuccessful = 1, maxDiscarded = 500, workers = 1)

  behavior of "sort"

  it should "sort array of ints from 0 to 100" in {
    forAll(arraysGen){  a: Array[Int] =>
      info(s"${a.mkString(",")}")
    medianOf3Partitioning.sort(a) shouldEqual a.sorted }
  }
}

Gens 特征是我的 - 它只包含Gen[数组[Int]的定义

trait Gens {

  val arraysGen: Gen[Array[Int]] = containerOf[Array, Int](
    chooseNum(Int.MinValue, Int.MaxValue) suchThat { _ < 100 }
  ).suchThat(_.length < 50)
}

我使用这个源进行测试设置。以防万一,我提供了scalacheck和scalatest的版本(来自Dependencies.scala和build.sbt):

lazy val scalaTest = "org.scalatest" %% "scalatest" % "3.0.5"
...
libraryDependencies ++= {
      val scalaTestVersion = "3.0.5"
      val scalaCheckVersion = "1.14.0"
      Seq(scalaTest % Test,
        "org.scalatest" %% "scalatest" % scalaTestVersion % "test",
        "org.scalacheck" %% "scalacheck" % scalaCheckVersion % "test",
        "com.storm-enroute" %% "scalameter" % "0.9"
      )
    }

共有1个答案

刘松
2023-03-14

基于M. Odersky的“Scala编程”中的小例子,我从< code > GeneratorDrivenPropertyChecks 切换到更一般的< code>PropertyChecks。我还发现了我的< code>Gen[Array[Int]]的问题,所以我也必须检查一下。发布一个有效的解决方案(发现失败的案例),以帮助其他人:

性别特征:

trait Gens {

  val minIntArraysGen: Gen[Array[Int]] = containerOf[Array, Int](Gen.chooseNum(0, 100))
}

基于属性的测试:

import ca.vgorcinschi.Gens
import org.scalatest.MustMatchers._
import org.scalatest.WordSpec
import org.scalatest.prop.PropertyChecks

class MedianOf3PartitioningProps extends WordSpec with PropertyChecks with Gens {

  "sort method" must {
    "sort any Int array" in {
      forAll (minIntArraysGen){ (a: Array[Int]) =>
        whenever(a.nonEmpty) {
          val maybeSorted = new MedianOf3Partitioning[Int].sort(a)
          maybeSorted must equal (a.sorted)
        }
      }
    }
  }
}
 类似资料:
  • 我有很多使用Lombok生成器的字段的类。 但是,这为调用方提供了在不设置的情况下创建对象的选项,如果使用该选项,将导致运行时失败。 我正在寻找在构建时捕捉这些错误的方法。 有一些非Lombok的方法,比如StepBuilder,甚至是构造函数来确保总是设置强制字段,但我对使用Lombok Builder实现这一点的方法感兴趣。 此外,我理解为了进行编译时检查而设计类(如step-builder或

  • 如何在下面的查询生成器代码段中获得industries page属性有值的结果?(即,其值不是空字符串)

  • 喜欢 mvn exec:java-Dexec.mainClass=“packageName.class” mvn-Dtest=“className#method” 在maven生成的目标/jar文件上,上面的命令有效吗,或者还有其他命令吗? 如果不在pom上应用maven插件,则无法找到搜索此类命令以在maven生成的jar上运行junit

  • 属性检查器 是我们查看并编辑当前选中节点、节点组件和资源的工作区域。在 场景编辑器、层级管理器 中选中节点或者在 资源管理器 中选中资源,就会在 属性检查器 中显示它们的属性,可供查询和编辑。 节点名称和激活开关 左上角的复选框表示节点的激活状态,使用节点处于非激活状态时,节点上所有图像渲染相关的组件都会被关闭,整个节点包括子节点就会被有效的隐藏。 节点激活开关右边显示的是节点的名称,和 层级管理

  • 属性检查器 是我们查看并编辑节点或资源属性的重要渠道。可编辑节点的位置,节点上的组件,图片,材质,模型等资源,面板功能细节多,较为复杂。 在 场景编辑器 ,层级管理器 选中节点,或者在 资源管理器 选中资源,就能在 属性检查器 中显示并开始编辑它的属性。 头部公共部分 左边的 两个箭头 是历史记录,点击可切换编辑项; 右边的 锁图标 可锁定面板,固定住编辑的对象,不让面板随新的选中项而变动。 编辑

  • 请假设正常的“新手”的说法。 我使用的是Scala2.12.10;在build.sbt中,我添加了Scalatest: 我将一些scala.js添加到一个现有的java项目中,这样我的scala源代码路径是正常的,但是我为java和资源创建了一些空目录,并使用了一个不同的目标,这样就不会与现有的代码发生冲突: 我将ScalaTest示例文件exampleSpec.scala放在src/test/s