什么';这个ScalaTest/ScalaCheck示例缺少什么?
我正在试用ScalaCheck,但还没有弄清楚如何在ScalaTest用户手册上构建第一个示例。我非常确定,以下内容需要在导入之前进行,并包装在从某个库类扩展而来的类中。声明“mix in”什么';这个ScalaTest/ScalaCheck示例缺少什么?,scala,scalatest,scalacheck,Scala,Scalatest,Scalacheck,我正在试用ScalaCheck,但还没有弄清楚如何在ScalaTest用户手册上构建第一个示例。我非常确定,以下内容需要在导入之前进行,并包装在从某个库类扩展而来的类中。声明“mix in”PropertyChecks,但没有给出将其混入的适当类的示例: forAll { (n: Int, d: Int) => whenever (d != 0 && d != Integer.MIN_VALUE && n != Integer.MIN_VA
PropertyChecks
,但没有给出将其混入的适当类的示例:
forAll { (n: Int, d: Int) =>
whenever (d != 0 && d != Integer.MIN_VALUE
&& n != Integer.MIN_VALUE) {
val f = new Fraction(n, d)
if (n < 0 && d < 0 || n > 0 && d > 0)
f.numer should be > 0
else if (n != 0)
f.numer should be < 0
else
f.numer should be === 0
f.denom should be > 0
}
}
测试、导入和所有测试的完整源文件是什么?如果您在此处查看scala测试的github存储库,您可以在此处找到一些额外的代码 对于您的源,这是导入和结构
import org.scalatest.{Matchers, FlatSpec}
import org.scalatest.prop.PropertyChecks
class Fraction(n: Int, d: Int) {
require(d != 0)
require(d != Integer.MIN_VALUE)
require(n != Integer.MIN_VALUE)
val numer = if (d < 0) -1 * n else n
val denom = d.abs
override def toString = numer + " / " + denom
}
class PropertySpec extends FlatSpec with PropertyChecks with Matchers {
forAll { (n: Int, d: Int) =>
whenever(d != 0 && d != Integer.MIN_VALUE
&& n != Integer.MIN_VALUE) {
val f = new Fraction(n, d)
if (n < 0 && d < 0 || n > 0 && d > 0)
f.numer should be > 0
else if (n != 0)
f.numer should be < 0
else
f.numer should be === 0
f.denom should be > 0
}
}
val invalidCombos =
Table(
("n", "d"),
(Integer.MIN_VALUE, Integer.MIN_VALUE),
(1, Integer.MIN_VALUE),
(Integer.MIN_VALUE, 1),
(Integer.MIN_VALUE, 0),
(1, 0)
)
forAll(invalidCombos) { (n: Int, d: Int) =>
evaluating {
new Fraction(n, d)
} should produce[IllegalArgumentException]
}
}
import org.scalatest.{Matchers,FlatSpec}
导入org.scalatest.prop.PropertyChecks
类分数(n:Int,d:Int){
需要(d!=0)
require(d!=整数.MIN_值)
require(n!=整数.MIN_值)
数值=如果(d<0)-1*n否则n
val denom=d.abs
覆盖def toString=numer+“/”+denom
}
类PropertySpec使用带有匹配器的PropertyChecks扩展FlatSpec{
对于所有{(n:Int,d:Int)=>
无论何时(d!=0&&d!=Integer.MIN_值
&&n!=整数。最小值){
val f=新分数(n,d)
如果(n<0&&d<0 | n>0&&d>0)
f、 数值应大于0
else如果(n!=0)
f、 数值应小于0
其他的
f、 数值应为===0
f、 denom应大于0
}
}
val invalidCombos=
桌子(
(“n”、“d”),
(Integer.MIN_值,Integer.MIN_值),
(1,整数。最小值),
(整数最小值,1),
(整数最小值,0),
(1, 0)
)
forAll(invalidCombos){(n:Int,d:Int)=>
评估{
新分数(n,d)
}应产生[IllegalArgumentException]
}
}
scalatest的最新版本未实施评估,并将=
标记为过时。
所以,我将示例改写为:
import org.scalatest._
import org.scalatest.prop.PropertyChecks
protected class Fraction(n: Int, d: Int) {
require(d != 0 && d != Integer.MIN_VALUE && n != Integer.MIN_VALUE)
val numer = if (d < 0) -1 * n else n
val denom = d.abs
override def toString = numer + " / " + denom
}
class SscceProps extends FlatSpec with PropertyChecks with Matchers {
it should "valid combos" in { forAll { (n: Int, d: Int) =>
whenever(d != 0 && d != Integer.MIN_VALUE && n != Integer.MIN_VALUE) {
val f = new Fraction(n, d)
if (n < 0 && d < 0 || n > 0 && d > 0) f.numer should be > 0
else if (n != 0) f.numer should be < 0
else f.numer shouldBe 0
f.denom should be > 0
}
}}
it should "invalid combos" in {
forAll(Table(
("n", "d"),
(Integer.MIN_VALUE, Integer.MIN_VALUE),
(1, Integer.MIN_VALUE),
(Integer.MIN_VALUE, 1),
(Integer.MIN_VALUE, 0),
(1, 0)
)) { (n: Int, d: Int) =>
an[IllegalArgumentException] should be thrownBy {new Fraction(n, d)}}
}
}
import org.scalatest_
导入org.scalatest.prop.PropertyChecks
保护类分数(n:Int,d:Int){
require(d!=0&&d!=Integer.MIN\u值&&n!=Integer.MIN\u值)
数值=如果(d<0)-1*n否则n
val denom=d.abs
覆盖def toString=numer+“/”+denom
}
类SSCeprops使用带有匹配器的PropertyChecks扩展FlatSpec{
它应该在{forAll{(n:Int,d:Int)=>
无论何时(d!=0&&d!=Integer.MIN\u值&&n!=Integer.MIN\u值){
val f=新分数(n,d)
如果(n<0&&d<0 | | n>0&&d>0),则f.numer应大于0
如果(n!=0),则f.numer应小于0
否则f.numer应为0
f、 denom应大于0
}
}}
它在中应该是“无效组合”{
福尔(表(
(“n”、“d”),
(Integer.MIN_值,Integer.MIN_值),
(1,整数。最小值),
(整数最小值,1),
(整数最小值,0),
(1, 0)
)){(n:Int,d:Int)=>
[IllegalArgumentException]应该由{新分数(n,d)}抛出
}
}
这是一个有效的解决方案!非常感谢。你可能帮我省去了无数个小时的猜测,试图填补遗漏的细节。(正如您可能注意到的,github上的源代码省略了相同的细节。)很高兴能帮助您,对于示例,这是真的,他们没有解释,有时很难找到导入,而且github也没有太大帮助,正如您所说的,如果您认为这是一个有效的答案,请标记它。提前谢谢
import org.scalatest._
import org.scalatest.prop.PropertyChecks
protected class Fraction(n: Int, d: Int) {
require(d != 0 && d != Integer.MIN_VALUE && n != Integer.MIN_VALUE)
val numer = if (d < 0) -1 * n else n
val denom = d.abs
override def toString = numer + " / " + denom
}
class SscceProps extends FlatSpec with PropertyChecks with Matchers {
it should "valid combos" in { forAll { (n: Int, d: Int) =>
whenever(d != 0 && d != Integer.MIN_VALUE && n != Integer.MIN_VALUE) {
val f = new Fraction(n, d)
if (n < 0 && d < 0 || n > 0 && d > 0) f.numer should be > 0
else if (n != 0) f.numer should be < 0
else f.numer shouldBe 0
f.denom should be > 0
}
}}
it should "invalid combos" in {
forAll(Table(
("n", "d"),
(Integer.MIN_VALUE, Integer.MIN_VALUE),
(1, Integer.MIN_VALUE),
(Integer.MIN_VALUE, 1),
(Integer.MIN_VALUE, 0),
(1, 0)
)) { (n: Int, d: Int) =>
an[IllegalArgumentException] should be thrownBy {new Fraction(n, d)}}
}
}