2016-07-25 109 views
2

我試圖使用scalacheck(版本1.12.2)生成任意UUID的列表。出於某種原因,生成列表中的每個UUID都是相同的。對於其他類型(如List [String]或List [Int]),情況並非如此。這是我寫的代碼:Scalacheck總是爲任意的列表生成相同的UUID [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(_)) 
    } 
} 

和樣品運行:)

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 

回答

2

使用Gen.wrap(它應該工作。

所以在你的示例代碼中的第一個隱含的你將它更改爲:

import org.scalacheck.Gen 

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

謝謝!這解決了它。 – emccorson