scalacheck:生成一个非空字符串

问题描述 投票:8回答:2

什么是产生一个非空字符串的最佳方式,在这样的背景下,当

  private def createIndexFn() = {
      for{
        someChar <-  Gen.alphaString
        aNumber <- Gen.choose(1,100)
        //...
       }       
       yield { 
           MyThing(AnotherType(someChar.toString), SomeOtherType(aNumber), aNumber)
   }
 }

你需要也许someChar是一个非空字符串。我知道你可以在whenever部分使用forAll但我不知道怎么做,在发电机的这一部分。

谢谢

scala scalacheck
2个回答
11
投票

我一直在寻找的是:

  import org.scalacheck.Arbitrary.arbitrary

  arbitrary[String].suchThat(!_.isEmpty)

并且可以使用像

    for {
        name <- arbitrary[String].suchThat(!_.isEmpty)
         age <- Gen.choose(0, 100)}
    yield Person(name, age)

希望这可以帮助别人


7
投票

接受的答案引起了我丢弃测试的高比例,我最终使用:

import org.scalacheck._

Arbitrary(Gen.nonEmptyListOf[Char](Arbitrary.arbChar.arbitrary)).map(_.mkString))
© www.soinside.com 2019 - 2024. All rights reserved.