【问题标题】:scalacheck: Generate a non empty stringscalacheck:生成一个非空字符串
【发布时间】:2016-08-24 14:53:02
【问题描述】:

在这样的上下文中,生成非空字符串的最佳方法是什么

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

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

谢谢

【问题讨论】:

    标签: scala scalacheck


    【解决方案1】:

    接受的答案导致我放弃测试的比例很高,我最终使用:

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

    【讨论】:

      【解决方案2】:

      我正在寻找的是:

      import org.scalacheck.Arbitrary.arbitrary
      
      arbitrary[String].suchThat(!_.isEmpty)
      

      可以像这样使用

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

      希望这对某人有所帮助

      【讨论】:

      • 如果您添加使其编译所需的导入,它可能会有所帮助;)
      【解决方案3】:

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

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

      或者创建一个长度受限的随机长度

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-03
        • 1970-01-01
        • 1970-01-01
        • 2011-05-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多