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

斯卡拉切克没有失败?

笪俊迈
2023-03-14

我正在尝试使用ScalaTest和ScalaCheck进行基于属性的测试。我的测试概述如下:

import org.scalatest.prop.PropertyChecks
import org.scalatest.{FlatSpec, Matchers}


object Calc {
  def add(a:Int, b:Int) = a+b

  def div(a:Int, b:Int) = a/b
}


class PropSpec1 extends FlatSpec with Matchers with PropertyChecks {
  behavior of Calc.getClass.getName


  it should "add integers" in {
    forAll { (a: Int, b: Int) =>
      Calc.add(a, b) shouldEqual a + b
    }
  }

  it should "divide integers" in {
    forAll {
      (a:Int, b:Int) => Calc.div(a, b) shouldEqual a/b
    }
  }
}

现在我看到的是,如果我一遍又一遍地运行PropSpec1中的测试,有时第二个测试会通过,但大多数时候会失败。现在,如果0没有被b测试,那么很明显它会通过,但我认为这是它会一直尝试的事情之一。重复运行sbt clean test时,我看到了相同的行为;有时两项测试都通过了。

这对于基于属性的测试是正常的吗,还是我需要做一些事情(比如总是提供我自己的生成器)?

共有1个答案

沃阳飙
2023-03-14

但我认为这是它一直在尝试的事情之一

假设是一切罪恶的根源。

基本上,你要求Scalacheck为你生成的只是一个< code>Int的样本。一个有效的< code>Int可以是大约40亿个值中的一个。

因为您知道0将导致该函数失败(抛出一个异常),所以您可以像这样简单地过滤掉它:

forAll { (a:Int, b:Int) =>
  whenever(a != 0 && b != 0) {
    Calc.div(a, b) mustEqual a/b
  }
}

页(page的缩写)如果你检查scaladoc中的< code > wheach 函数,会有一个类似的例子。

 类似资料:
  • 我想用scala中的jackson反序列化json json_结构: {“type”:“struct”,“fields”:[{“name”:“code_role”,“type”:“string”,“nullable”:true,“metadata”:{“HIVE_type_string”:“string”},{“name”:“libelle_role”,“type”:“string”,“nulla

  • 请看下面的代码,让我知道我哪里做错了? 使用: DSE版本-5.1.0 172.31.16.45:9042连接到测试群集。[cqlsh 5.0.1|Cassandra3.10.0.1652|DSE 5.1.0|CQL规范3.4.4|本地协议v4]使用HELP寻求帮助。 谢谢 斯卡拉 斯卡拉 斯卡拉 我在这里什么都得不到?甚至没有错误。

  • 在计算附加信息时发生内部错误。org.eclipse.jdt.internal.core.SearchableEnvironment.(Lorg/eclipse/jdt/内部/核心/JavaProject; Lorg/eclipse/jdt/核心/WorkingCopyOwner;)

  • 我有一个用斯卡拉写的UDF,我希望能够通过Pyspark会话调用它。UDF 采用两个参数:字符串列值和第二个字符串参数。我已经能够成功地调用UDF,如果它只需要一个参数(列值)。如果需要多个参数,我很难调用UDF。以下是到目前为止我在斯卡拉和Pyspark中能够做的事情: Scala UDF: 在Scala中使用它时,我已经能够注册和使用这个UDF: Scala主类: 以上工作成功。下面是Pysp

  • 我在eclipse中将scala项目转换为使用Maven(只需右键单击project并配置Maven build),这就创建了pom。xml,添加了正确的依赖项,它从maven存储库中提取了所需的JAR,但每当我尝试编译时,我都看不到在target\classes文件夹中生成类文件。然而,我在target\classes文件夹下的相应目录中看到了scala文件的实际源代码。我不确定它为什么要复制t

  • 我的测试代码如下所示: 显然,这是无法编译的,因为需要一个到套接字的路径作为参数,但我不能调用,因为它不是类型,也不能调用,因为mock不将传递给它的类型的参数作为自己的参数。 那么,如何编写一个模拟工厂来传递给我的扫描仪呢?我甚至不知道如何模拟一个需要争论的类!