scalacheck:生成非空字符串

时间:2016-08-24 14:53:03

标签: scala scalacheck

在类似

的上下文中,生成非空字符串的最佳方法是什么?
  private def createIndexFn() = {
      for{
        someChar <-  Gen.alphaString
        aNumber <- Gen.choose(1,100)
        //...
       }       
       yield { 
           MyThing(AnotherType(someChar.toString), SomeOtherType(aNumber), aNumber)
   }
 }

你需要someChar为非空字符串。我知道您可以在whenever部分使用forAll,但我想知道如何在生成器的这一部分中执行此操作。

由于

3 个答案:

答案 0 :(得分:10)

我在寻找的是:

  import org.scalacheck.Arbitrary.arbitrary

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

可以像

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

希望这有助于某人

答案 1 :(得分:5)

接受的答案对我造成了高比例的废弃测试,我最终使用了:

import org.scalacheck._

Arbitrary(Gen.nonEmptyListOf[Char](Arbitrary.arbChar.arbitrary)).map(_.mkString))

答案 2 :(得分:0)

另一种方法是创建一个固定长度的随机字符串

Gen.listOfN(10, Gen.asciiPrintableChar).map(_.mkString)

或创建具有约束长度的随机长度

for {
  n     <- Gen.chooseNum(5, 20)
  chars <- Gen.listOfN(n, Gen.asciiPrintableChar)
} yield chars.mkString