qc

Software screenshot:
qc
Dettagli del software:
Versione: 0.1
Data di caricamento: 14 Apr 15
Sviluppatore: Peter Scott
Licenza: Libero
Popolarità: 23

Rating: 4.0/5 (Total Votes: 2)

qc è uno strumento di test che permette di scrivere le proprietà che ci si aspetta di tenere vero, e lasciare che il computer di generare casi di test randomizzati per verificare che queste proprietà in realtà tengono & nbsp;. Ad esempio, se avete scritto comprimere e decomprimere funzioni qualche programma di compressione dei dati, una proprietà evidente prova è che la compressione e decompressione di una stringa restituisce la stringa originale. Ecco come si potrebbe esprimere che:
import unittest
import qc
TestCompression class (unittest.TestCase):
& Nbsp; @ qc.property
& Nbsp; def test_compress_decompress (self):
& Nbsp; "" ". Verificare che la compressione e decompressione restituisce i dati originali" ""
& Nbsp; data = qc.str () # Una stringa arbitraria. I valori sono randomizzati.
& Nbsp; self.assertEqual (dati, decomprimere (compressione (dati)), repr (dati))
Questa è una prova normale con built-in framework unittest del Python (che è il motivo per cui c'è così tanto boilerplate). In alternativa, si potrebbe fare la stessa cosa con un framework di test diverso, come il mini-verbose, naso abbastanza piacevole. Il decoratore @ qc.property esegue la funzione decorato più volte, e ogni volta i valori restituiti da funzioni come qc.string () sono diversi. In altre parole, QuickCheck è compatibile con quasi tutti i framework di unit test là fuori; non è particolarmente esigente.
Funzioni come qc.str (), qc.int (), e così via, generano valori arbitrari di un certo tipo. Nell'esempio precedente, stiamo affermando che la proprietà vale per tutte le stringhe. Quando si eseguono i test, QuickCheck genererà stringhe randomizzati per il test.
Noterete che ho detto "randomizzato", non "random". Questo è intenzionale. La distribuzione dei valori è ottimizzato per includere valori interessanti, come le stringhe vuote, o stringhe con caratteri NUL al centro, o stringhe contenenti testo inglese. In generale, QuickCheck cerca di dare un buon mix di valori difficili intelligenti e casualità. Questo è essenzialmente quello che si potrebbe fare, se si doveva scrivere casi di test molto accurati a mano, solo che non hanno a che fare. In pratica, il computer ha meno preconcetti su ciò che costituisce dati sane, così sarà spesso trovare bug che non sarebbe mai venuto in mente di scrivere i test per. Non sa come evitare inconsciamente gli insetti.
Lei non si è limitati alle funzioni di valore arbitrario incorporate. È possibile utilizzarli come mattoni per generare il proprio. Per esempio:
classe Point (oggetto):
& Nbsp; def __init __ (self, x, y):
& Nbsp; self.x, self.y = float (x), float (y)
punto def ():
& Nbsp; "" "Ottenere un punto arbitrario." ""
& Nbsp; x = qc.int (-20, 20)
& Nbsp; y = qc.int (-34, 50)
& Nbsp; tornare Point (x, y)
È quindi possibile utilizzare questo per generare valori dei punti arbitrari in proprietà. Ecco un test di naso-style:
@ Qc.property
def test_triangle_inequality ():
& Nbsp; pt = punto ()
& Nbsp; affermare abs (pt.x) + abs (pt.y)> = Math.sqrt (pt.x ** 2 + pt.y ** 2), (pt.x, pt.y)
Quando si esegue questo, qualcosa di magico accade: QuickCheck cercherà di generare valori difficili sia per il X e Y variabili nella classe Point, insieme, così vedrete punti come (0, 0), (1, 1), ( 0, 1), (385.904, 0), così come quelli completamente casuali come (584, -35.809.648). In altre parole, piuttosto che disegnare valori xey da un flusso di numeri casuali con alcuni valori difficili in esso, QuickCheck effettivamente cercare di generare combinazioni difficili di coordinate xe y.
Funzioni per ottenere dati arbitrari
- Int (basso, alto) dà int, tra i limiti facoltativi bassa e alta.
- Lunga (basso, alto) dà lunghi, tra i limiti facoltativi bassa e alta.
- Float (basso, alto) dà carri allegorici, tra i limiti facoltativi bassa e alta. Nessun infiniti o NaN valori.
& Nbsp; str (lunghezza = None, MAXLEN = None) dà stringhe, di tipo str. La codifica è UTF-8. Se viene data la lunghezza, le stringhe saranno esattamente così a lungo. Se maxlen è dato, la lunghezza della stringa sarà caratteri al massimo MAXLEN.
- Unicode (lunghezza = None, MAXLEN = None) dà stringhe Unicode, di tipo unicode. Se viene data la lunghezza, le stringhe saranno esattamente così a lungo. Se maxlen è dato, la lunghezza della stringa sarà caratteri al massimo MAXLEN.
- Nome () dà nomi, in Unicode. Queste vanno dalla prosaica, come "John Smith", alle esotiche - nomi contenenti non rottura spazi o indirizzi e-mail, o caratteri Unicode fuori del Basic Multilingual Plane. Questo è, se non altro, meno perverso che i nomi si vedrà in un numero sufficientemente ampio insieme di dati su Internet.
- NameUtf8 () è lo stesso nome () codificare ('utf8')..
- ListaDa (articoli) restituisce oggetti casuali da una lista. Ciò è particolarmente utile per creare le proprie funzioni generatore di dati arbitrari.
- Randstr (lunghezza = None, maxlen = sys.maxint) dà stringhe di byte casuali. Se viene data la lunghezza, le stringhe saranno esattamente così a lungo. Se maxlen è dato, la lunghezza della stringa sarà al massimo maxlen byte.
Le corde prodotte da str e unicode sono randomizzati, ma qualche sforzo è stato messo in rendendoli sufficientemente perversa come per rivelare i bug in un sacco di codice di elaborazione stringhe. L'elenco dei nomi è vagamente basato sui ricordi orribili di vedere codice di elaborazione nome incidente su dati reali, più e più e più volte, come è diventato sempre più chiaro che il mondo è pazzo, e siamo veramente condannati. (Questa sensazione passa una volta a ottenere la copertura dei test abbastanza e le cose finalmente smettere di crash. C'è speranza!)
Il nome e di esempio stringa di dati in qc.arbitrary può essere interessante come fonte di ulteriori dati di test case deteministic. Sentitevi liberi di prendere in prestito qualsiasi di esso. Gli interni sono magiche, ma delle parti interne magiche, le più interessanti sono in qc.arbitrary e qc

Requisiti :.

  • Python

Programmi simili

NoseDBResult
NoseDBResult

11 May 15

CATSRunner
CATSRunner

3 Jun 15

pinocchio
pinocchio

14 Apr 15

pyfix
pyfix

20 Feb 15

Commenti a qc

I commenti non trovato
Aggiungi commento
Accendere le immagini!