2015-10-27 24 views
11

Sto provando a generare dati casuali con Scalacheck. Ho una gerarchia di case classes con molte proprietà. L'unico modo che ho trovato finora per popolare le classi case è come questo:scalacheck case class data generator generator

case class Data(a: String, 
       b: String, 
       c: String) 

val genLigneDecompte: Gen[Data] = for { 
    ag <- Gen.alphaStr 
    bg <- Gen.alphaStr 
    cg <- Gen.alphaStr 
} yield Data(
    a = ag, 
    b = bg, 
    c = cg 
) 

Per una classe case con 10-20 proprietà è abbastanza noioso. Mi stavo chiedendo se ci fosse un modo per automatizzarlo in qualche modo ...

risposta

10

Sono sicuro che qualcuno troverà una soluzione che riassume l'arità usando shapeless. Ma ci sono alcuni metodi di supporto per generare Gen [T] casi dalle funzioni di varia arietà, che possono essere utilizzati con il metodo apply dell'oggetto compagna caso classe

case class Data(a: String, b: String, c: String) 

val dataArb = Arbitrary(Gen.resultOf(Data)) 
// equivalent to 
// val f: (String, String, String) => Data = Data.apply 
// val gen: Gen[Data] = Gen.resultOf(f) 
// val arb: Arbitrary[Data] = Arbitrary(gen) 
+0

Sono sorpreso che una libreria basata su Shapeless non sia già esistente – wheaties

+0

Scopriamo che ci sono già alcuni metodi di supporto in Gen. –

+0

Grazie, questo è quello che stavo cercando! – KaC