【发布时间】:2017-12-02 08:21:26
【问题描述】:
我想测试我的功能并使用 ScalaCheck。
属性测试如下:
object WindowsSpec extends Properties("Windows") {
val pathsGen = Gen.frequency(
(3, "C:\\Windows\\DigitalLocker"),
(2, "C:\\Temp"),
(3, "Invalid folder"),
(1, "C:\\Program Files\\Internet Explorer"),
(4, "C:\\Program Files\\Windows Defender Advanced Threat Protection"),
(1, "C:\\Program Files\\Windows Photo Viewer")
)
val pathsGenContainer = Gen.containerOf[List,String](pathsGen)
property("validPaths") = forAll(pathsGenContainer) { a: List[String] =>
println(a)
Windows.arePathsValid(a).value.length > 0
}
}
为什么我得到一个空列表?
我尝试在 shell 中找出生成器是否工作:
scala> :paste
// Entering paste mode (ctrl-D to finish)
val pathsGen = Gen.frequency(
(3, "C:\\Windows\\DigitalLocker"),
(2, "C:\\Temp"),
(3, "Invalid folder"),
(1, "C:\\Program Files\\Internet Explorer"),
(4, "C:\\Program Files\\Windows Defender Advanced Threat Protection"),
(1, "C:\\Program Files\\Windows Photo Viewer")
)
val pathsGenContainer = Gen.containerOf[List,String](pathsGen)
// Exiting paste mode, now interpreting.
pathsGen: org.scalacheck.Gen[String] = org.scalacheck.Gen$$anon$1@6cb26245
pathsGenContainer: org.scalacheck.Gen[List[String]] = org.scalacheck.Gen$$anon$1@5335e968
scala> pathsGen
pathsGen pathsGenContainer
scala> pathsGen.sample
res26: Option[String] = Some(C:\Program Files\Internet Explorer)
scala> pathsGen
val pathsGen: org.scalacheck.Gen[String]
scala> pathsGenContainer.sample
res27: Option[List[String]] = Some(List(C:\Temp, C:\Temp, C:\Program Files\Windows Defender Advanced Threat Protection, Invalid folder, C:\Program Files\Internet Explorer, C:\Program Files\Internet Explorer, C:\Temp, C:\Temp, C:\Program Files\Windows Photo Viewer, Invalid folder, C:\Program Files\Windows Defender Advanced Threat Protection, C:\Program Files\Windows Defender Advanced Threat Protection, C:\Windows\DigitalLocker, Invalid folder, C:\Program Files\Windows Photo Viewer, C:\Program Files\Windows Defender Advanced Threat Protection, C:\Temp, C:\Program Files\Internet Explorer, C:\Temp, C:\Program Files\Windows Defender Advanced Threat Protection, C:\Program Files\Windows Photo Viewer, Invalid folder, Invalid folder, C:\Windows\DigitalLocker, C:\Program...
如您所见,生成器生成了一些输入。
我做错了什么?
【问题讨论】:
-
您的代码看起来正确。我已将其复制粘贴到设置了 scalacheck 的项目中,并获得了生成路径的全屏)。我用过这样的检查: property("validPaths") = forAll(pathsGenContainer) { a: List[String] => println(a) a.forall(v => !v.isEmpty) }
标签: scala scalacheck