2015-01-06 13 views
8

Ho un progetto con un sacco di generatori Scalacheck che sta ricevendo una GeneratorDrivenPropertyCheckFailedException con il messaggio "Ha dato il massimo dopo 0 valutazioni delle proprietà riuscite, 2 valutazioni sono state scartate."Perché il mio PropertyCheckConfig Scalacheck/Scalatest viene ignorato?

Voglio provare a valutarlo molte più volte come 500 (il valore predefinito) sarebbe corretto, ma non vedo che la mia sovrascrittura della configurazione sia effettivamente utilizzata.

Ho aggiunto questo codice alla classe di test e sto ancora ricevendo esattamente lo stesso messaggio. Ho provato 'sbt clean' solo per assicurarmi che qualcosa di strano non stesse succedendo lì.

implicit override val generatorDrivenConfig = PropertyCheckConfig(minSuccessful = 1, maxDiscarded = 500, workers = 1) 

Perché il mio PropertyCheckConfig Scalacheck/Scalatest viene ignorato?

sto usando ScalaTest 2.2.1 con ScalaCheck 1.12.1 con Scala 2.10.4

risposta

9

Se si sta filtrando il generatore (per esempio, utilizzando un suchThat), il generatore può essere la creazione di un gran numero di valori che non soddisfano il vincolo suchThat e vengono pertanto scartati. Ho incontrato questo quando vincolo la lunghezza delle stringhe. L'unico suggerimento che posso darti è cercare di creare il tuo Gen in un modo diverso in cui non stai scartando così tanti di loro.

Per esempio, ecco quello che ho avuto per la generazione di stringhe di 4 caratteri:

val gen4CharString = Gen.listOfN(4, (Gen.listOfN[Char] suchThat (s => s != "" && s.length == 4))) 

Questo stava causando troppi valori generati da scartare, con conseguente un errore simile a quello che stavano vedendo. Alterare il generatore come di seguito ha eliminato il problema.

val gen4CharString = Gen.listOfN[Char] (4, Gen.alphaChar).map (_.mkString) 
+0

Estremamente utile suggerimento. Si è imbattuto in questo problema generando stringhe non superiori a una certa lunghezza con 'Gen.alphaNumStr.suchThat (_. Length <= 50)' e risolto con 'Gen.choose (0, 50) .map (Gen.listOfN (_, Gen.alphaNumChar)). mappa (_. mkString) '. –

Problemi correlati