qc

Sagteware kiekie:
qc
Sagteware besonderhede:
Weergawe: 0.1
Upload datum: 14 Apr 15
Ontwikkelaar: Peter Scott
Lisensie: Gratis
Populariteit: 23

Rating: 4.0/5 (Total Votes: 2)

qc is 'n toets instrument waarmee jy eienskappe wat jy verwag om te hou waar, en laat die rekenaar genereer ewekansige toets gevalle te kontroleer dat hierdie eienskappe eintlik hou & nbsp skryf;. Byvoorbeeld, as jy geskryf het compress en decomprimeren funksies vir sommige data kompressie program, 'n ooglopende eiendom te toets, is dat die comprimeren en decompressie n string gee terug die oorspronklike string. Hier is hoe jy kan druk dat:
invoer unittest
invoer qc
klas TestCompression (unittest.TestCase):
& Nbsp; @ qc.property
& Nbsp; def test_compress_decompress (self):
& Nbsp; "" ". Toets dat die comprimeren en decompressie opbrengste die oorspronklike data" ""
& Nbsp; data = qc.str () # 'n arbitrêre string. Waardes is ewekansige.
& Nbsp; self.assertEqual (data, decomprimeren (compress (data)), repr (data))
Dit is 'n gewone toets met Python se ingeboude unittest raamwerk (wat is die rede waarom daar is so baie boiler). Alternatiewelik, kan jy die presiese dieselfde ding doen met 'n ander toets raamwerk, soos die minimaal verbose, heel aangename neus. Die @ qc.property versierder loop die versier funksie 'n paar keer, en elke keer as die waardes terug deur die funksies soos qc.string () is anders. Met ander woorde, QuickCheck versoenbaar is met pretty much elke eenheid toets raamwerk daar buite; dit is nie besonder veeleisend.
Funksies soos qc.str (), qc.int (), en so aan, genereer arbitrêre waardes van 'n sekere tipe. In die voorbeeld hierbo, is ons beweer dat die eiendom geld vir alle stringe. Wanneer jy die toetse, sal QuickCheck ewekansige snare vir die toets genereer.
Jy sal sien dat Ek het gesê "ewekansige", nie "random". Dit is doelbewus. Die verspreiding van waardes is tweaked interessante waardes, soos leë snare, of snare met NUL karakters in die middel, of snare met Engelse teks in te sluit. In die algemeen, QuickCheck probeer om 'n goeie mengsel van slim moeilike waardes en willekeur te gee. Dit is in wese wat jy sou doen, as jy het regtig deeglike toets gevalle te skryf met die hand, behalwe dat jy hoef dit nie te doen nie. In die praktyk, die rekenaar minder vooroordeel oor wat sane data vorm, so dit sal dikwels vind foute wat nooit sou plaasgevind het, aan julle toets gevalle vir om te skryf. Dit maak nie weet hoe om te onbewustelik vermy die foute.
Jy is nie beperk tot die gebou in arbitrêre waarde funksies. Jy kan dit gebruik as boustene jou eie te genereer. Byvoorbeeld:
klas Point (voorwerp):
& Nbsp; def __init __ (self, x, y):
& Nbsp; self.x, self.y = float (x), float (y)
def punt ():
& Nbsp; "" "Kry 'n arbitrêre punt." ""
& Nbsp; x = qc.int (-20, 20)
& Nbsp; y = qc.int (-34, 50)
& Nbsp; terugkeer punt (x, y)
Jy kan dan gebruik hierdie arbitrêre punt waardes te genereer in eiendomme. Hier is 'n neus-styl toets:
@ Qc.property
def test_triangle_inequality ():
& Nbsp; pt = punt ()
& Nbsp; beweer abs (pt.x) + abs (pt.y)> = math.sqrt (pt.x ** 2 + pt.y ** 2), (pt.x, pt.y)
Wanneer jy hierdie, iets magies gebeur: QuickCheck sal probeer moeilike waardes vir beide die x en y veranderlikes te genereer in die Point klas, saam, so jy sal sien punte soos (0, 0), (1, 1), ( 0, 1), (385904, 0), sowel as heeltemal random mense soos (584, -35.809.648). Met ander woorde, eerder as net die tekens van x en y waardes van 'n stroom van ewekansige getalle met 'n paar moeilike waardes in dit, QuickCheck sal eintlik probeer moeilike kombinasies van x en y koördinate te genereer.
Funksies vir die kry arbitrêre data
- Int (lae, hoë) gee SY, tussen die opsionele grense laag en hoog.
- Lank (lae, hoë) gee verlang, tussen die opsionele grense laag en hoog.
- Float (lae, hoë) gee dryf, tussen die opsionele grense laag en hoog. Geen oneindighede of NaN waardes.
& Nbsp; str (lengte = Geen, maxlen = Geen) gee snare, van die tipe str. Die kodering UTF-8. As lengte gegee is, sal die snare presies wat lank. As maxlen gegee is, sal die string lengte wees by die meeste maxlen karakters.
- Unicode (lengte = Geen, maxlen = Geen) gee unicode snare, van die tipe unicode. As lengte gegee is, sal die snare presies wat lank. As maxlen gegee is, sal die string lengte wees by die meeste maxlen karakters.
- Naam () gee name, in Unicode. Dit wissel van die prosaïese, soos "John Smith", aan die eksotiese - name wat nie-breek ruimtes, of e-pos adresse, of Unicode-karakters buite die Basiese Veeltalige vlak. Dit is, indien enigiets, minder perverse as die name sal jy in 'n groot genoeg stel Internet data sien.
- NameUtf8 () is dieselfde as die naam () enkodeer ('utf8)..
- FromList (items) gee terug ewekansige items uit 'n lys. Dit is meestal nuttig vir die skep van jou eie arbitrêre data generator funksies.
- Randstr (lengte = Geen, maxlen = sys.maxint) gee snare van ewekansige grepe. As lengte gegee is, sal die snare presies wat lank. As maxlen gegee is, sal die string lengte wees by die meeste maxlen grepe.
Die snare wat deur str en Unicode ewekansige, maar 'n paar pogings is in die maak van hulle voldoende perverse as foute te openbaar in 'n hele klomp van die string verwerking kode sit. Die naamlys is losweg gebaseer op aaklige herinneringe van sien naam verwerking kode ongeluk op werklike data, oor en oor en oor weer, as dit ooit meer duidelik dat die wêreld is mal geword het, en ons is werklik gedoem. (Hierdie gevoel gaan sodra jy genoeg toets dekking en dinge uiteindelik stop gekraak Daar is hoop!).
Die naam en string voorbeeld data in qc.arbitrary kan interessant as 'n bron van meer deteministic toetssaak data wees. Voel vry om enige te leen nie. Die internals is magic, maar van die magiese interne dele, die mees interessante mense is in qc.arbitrary en qc

Vereistes :.

  • Python

Soortgelyke sagteware

Kommentaar te qc

Kommentaar nie gevind
Kommentaar te lewer
Draai op die foto!