2010-02-14 8 views

risposta

55

Il modulo Test.QuickCheck.Monadic consente di testare il codice monadico, anche le operazioni eseguite in IO.

Un test di proprietà monodico è di tipo PropertyM m a, dove m è il campo in cui viene eseguito il test e a viene infine ignorato. Nel caso di PropertyM IO a, convertire il test monadico in un Property utilizzando monadicIO; per tutte le altre monadi, si usa invece monadic (che accetta una funzione per eseguire la monade, qualcosa che non ha lo IO).

In un test monadico, il valore return ed escluso dalla monade viene ignorato. Per controllare un'espressione, utilizzare assert; assert un valore falso fallirà il test. Utilizzare run per eseguire il codice nel monad in fase di test.

Ci sono altre azioni monadiche a vostra disposizione. Ad esempio, pick genererà nuovi input di test da Gen a e pre verificherà le condizioni di prova. Questi sono utili se gli input di test o le precondizioni stessi dipendono da valori calcolati tramite il monad in fase di test, nel qual caso il modo normale di generare input o di controllare le preconizzazioni non funzionerà.

Ecco un esempio di test del codice IO: controlliamo che dopo aver scritto qualcosa in un file temporaneo, possiamo leggere gli stessi dati indietro. A scopo dimostrativo, imporremo la condizione che scriviamo almeno un byte nel file. Le due proprietà di test fanno la stessa cosa; uno usa pick e pre inutilmente mentre l'altro no.

7

Il riferimento standard per il test del codice monadico è "Testing Monadic Code with QuickCheck". Mostra vari modi di test nel contesto di una monade come IO.

Ma dovresti davvero prendere in considerazione la possibilità di postare una domanda più concreta su cosa vorresti testare.

+0

Al giorno d'oggi il collegamento non funziona. –

+0

Koen sembra riorganizzare la sua homepage. Prova invece il seguente URL: [www.cse.chalmers.se/~rjmh/Papers/QuickCheckST.ps](http://www.cse.chalmers.se/~rjmh/Papers/QuickCheckST.ps) – svenningsson