加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何使用Scalacheck的Specs2自动测试String参数?

发布时间:2020-12-16 19:02:30 所属栏目:安全 来源:网络整理
导读:Scala重写的 specs2测试框架集成了 scalacheck的自动化测试.在specs2文档中给出的示例如何使用scalacheck与specs2 use integers或更复杂的自定义生成器,如 eric’s json example所示. 在尝试得到一个稍微复杂的例子工作时,我很挣扎,因为我不知道如何使用spec
Scala重写的 specs2测试框架集成了 scalacheck的自动化测试.在specs2文档中给出的示例如何使用scalacheck与specs2 use integers或更复杂的自定义生成器,如 eric’s json example所示.

在尝试得到一个稍微复杂的例子工作时,我很挣扎,因为我不知道如何使用specs2和scalacheck如果我想生成String参数而不是整数.这个Quickstart的例子呢

import org.scalacheck._

object StringSpecification extends Properties("String") { property("startsWith") = Prop.forAll((a: String,b: String) => (a+b).startsWith(a))

property("endsWith") = Prop.forAll((a: String,b: String) => (a+b).endsWith(b))

// Is this really always true? property("concat") = Prop.forAll((a: String,b: String) => (a+b).length > a.length && (a+b).length > b.length )

property("substring") = Prop.forAll((a: String,b: String) => (a+b).substring(a.length) == b )

property("substring") = Prop.forAll((a: String,b: String,c: String) => (a+b+c).substring(a.length,a.length+b.length) == b ) }

取自scalacheck homepage的外观,如果是使用scalacheck集成写成Specs2规范?

解决方法

一个非常直接的翻译是使用检查方法和简单的功能:

package test

import org.specs2._
import org.scalacheck._

class ScalaCheckExamples extends Specification with ScalaCheck { def is =

  "startsWith" ! check { (a: String,b: String) => (a+b).startsWith(a) }                                                ^
  "endsWith"   ! check { (a: String,b: String) => (a+b).endsWith(b) }                                                  ^
  "concat"     ! check { (a: String,b: String) => (a+b).length > a.length && (a+b).length > b.length }                 ^
  "substring"  ! check { (a: String,b: String) => (a+b).substring(a.length) == b }                                     ^
  "substring"  ! check { (a: String,a.length+b.length) == b }     ^
                                                                                                                        end
 }

而输出实际上表明concat属性是不正确的:

[info] + startsWith
  [info] + endsWith
  [error] x concat
  [error]   A counter-example is ['',''] (after 0 try)
  [error] the value is false
  [error]  (ScalaCheckExamplesSpec.scala:6)
  [info] + substring
  [info] + substring
  [info]
  [info] Total for specification ScalaCheckExamplesSpec
  [info] Finished in 7 seconds,547 ms
  [info] 5 examples,401 expectations,1 failure,0 error
  [info]

埃里克.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读