gpt4 book ai didi

scala - 如何在ScalaTest中使用ScalaCheck的收集和分类?

转载 作者:行者123 更新时间:2023-12-04 17:51:36 26 4
gpt4 key购买 nike

以下使用Prop.collect((a, b))即使测试成功运行,也没有按预期打印统计信息。

import org.scalacheck.Prop
import org.scalatest.{GivenWhenThen, PropSpec}
import org.scalatest.prop.{Checkers, GeneratorDrivenPropertyChecks}

import org.scalacheck.Prop.AnyOperators

class AccountSpecWithMarkup extends PropSpec with Checkers with GeneratorDrivenPropertyChecks {

property("max") {
check({
(a:Int, b:Int) => {

Prop.collect((a, b)) {

a != b || a == b
}
}
})
}
}

最佳答案

一个老问题,可能很久以前就有人回答或解决过,但由于我是一个试图找出问题的 scalacheck 新手,我将自愿做出回应。

不知道为什么您的示例没有按预期工作,但是这个更简单的测试可以解决问题(在 Scalacheck 1.14 中):

import org.scalacheck.Properties
import org.scalacheck.Prop.{forAll,collect}

object AccountSpecWithMarkup extends Properties("AccountSpecWithMarkup") {

property("max") = forAll { (a: Int, b: Int) =>
collect((a, b)) {
a != b || a == b
}
}
}

请注意,测试现在是 object延伸 Properties . Properties.property val 的类型为 PropertySpecifier ,它封装了可变状态( Props 的集合)并有一个 update方法。这条线
property("max") = forAll { ... }

是语法糖
property.update("max", forAll{ ... })

哪里 forAll生成 Prop 类型的值.此 Prop使用隐式 Arbitrary[Int] 累积值以供以后评估生成器为 a 生成测试值和 b , 由 collect 收集用于报告测试结果。

这是成功测试运行的前几行
+ AccountsSpectWithMarkup.max: OK, passed 100 tests.
> Collected test data:
4% (-2147483648,2147483647)
2% (1,2147483647)
2% (-1,-1)
2% (-1,0)
1% (-1,-1128775662)
1% (501893471,-2147483648)
1% (0,0)
1% (1529964222,-1507103054)
1% (36753817,-2147483648)
1% (2147483647,535423354

关于scala - 如何在ScalaTest中使用ScalaCheck的收集和分类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39356894/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com