2016-07-25 25 views
2

Ich versuche, eine Liste von beliebigen UUIDs mit scalacheck (Version 1.12.2) zu generieren. Aus irgendeinem Grund ist jede UUID in der generierten Liste identisch. Dies ist bei anderen Typen wie List [String] oder List [Int] nicht der Fall. Hier ist der Code, den ich geschrieben habe:Scalacheck erzeugt immer die gleiche UUID für eine beliebige Liste [UUID]

import org.scalacheck.Arbitrary.arbitrary 
import org.scalacheck.Arbitrary 
import java.util.UUID 

case class SomeUUIDClass(field: List[UUID]) 
case class SomeOtherClass(field: List[Int]) 

object Arb { 
    implicit def arbUUID: Arbitrary[UUID] = Arbitrary { 
     UUID.randomUUID() 
    } 

    implicit def arbUUIDClass = Arbitrary { 
     for { 
      field <- arbitrary[List[UUID]] 
     } yield SomeUUIDClass(field) 
    } 

    implicit def arbOtherClass = Arbitrary { 
     for { 
      field <- arbitrary[List[Int]] 
     } yield SomeOtherClass(field) 
    } 

    def main(args: Array[String]) { 
     println("without uuids:") 
     arbitrary[SomeOtherClass].sample.get.field.foreach(println(_)) 
     println("") 

     println("with uuids:") 
     arbitrary[SomeUUIDClass].sample.get.field.foreach(println(_)) 
    } 
} 

Und ein Probelauf:

without uuids: 
-1 
0 
2147483647 
-1 
-2147483648 
527079214 
-698179980 
1192016877 
-1001957700 
0 
682853458 
-1 
-2147483648 
109314552 
1130736291 
1080418 
1771214863 
1164874892 
-1306566270 
2147483647 
-2009106057 
2147483647 
-2147483648 
-1 
-1 
-1 
945958506 
777623735 
-490377345 
-272177229 
0 
-2147483648 
-1753697474 
-1 
736327057 
415072340 
0 

with uuids: 
a49540b4-29ce-464f-946d-3649f38fb8a6 
a49540b4-29ce-464f-946d-3649f38fb8a6 
a49540b4-29ce-464f-946d-3649f38fb8a6 
a49540b4-29ce-464f-946d-3649f38fb8a6 
a49540b4-29ce-464f-946d-3649f38fb8a6 
a49540b4-29ce-464f-946d-3649f38fb8a6 
a49540b4-29ce-464f-946d-3649f38fb8a6 
a49540b4-29ce-464f-946d-3649f38fb8a6 
a49540b4-29ce-464f-946d-3649f38fb8a6 

Antwort

2

Verwenden Gen.wrap() und es sollte funktionieren.

So auf dem ersten implizit in Ihrem Beispielcode würden Sie es ändern:

import org.scalacheck.Gen 

implicit def arbUUID: Arbitrary[UUID] = Arbitrary { 
    Gen.wrap(UUID.randomUUID) 
} 
+0

Dank! Das hat es behoben. – emccorson