qc

Skjermbilde programvare:
qc
Prog.varedetaljer:
Versjon: 0.1
Last opp dato: 14 Apr 15
Utvikler: Peter Scott
Lisens: Gratis
Popularitet: 23

Rating: 4.0/5 (Total Votes: 2)

qc er et testverktøy som lar deg skrive egenskaper som du forventer å holde sant, og la datamaskinen generere randomiserte testtilfeller for å sjekke at disse egenskapene faktisk holder. & Nbsp; For eksempel, hvis du har skrevet komprimere og dekomprimere funksjoner for noen data komprimering program, en åpenbar eiendom til testen er at komprimere og dekomprimere en streng gir tilbake den opprinnelige strengen. Her er hvordan du kan uttrykke at:
import unittest
import qc
klasse TestCompression (unittest.TestCase):
& Nbsp; @ qc.property
& Nbsp; def test_compress_decompress (egen-):
& Nbsp; "" ". Test at komprimere og dekomprimere avkastning de opprinnelige dataene" ""
& Nbsp; data = qc.str () # En vilkårlig streng. Verdier er randomisert.
& Nbsp; self.assertEqual (data, dekomprimere (komprimere (data)), repr (data))
Det er en vanlig test med Python innebygde unittest rammeverk (som er grunnen til at det er så mye standardtekst). Alternativt kan du gjøre akkurat det samme med en annen testing rammeverk, som minimal ordrik, ganske hyggelig nese. Den @ qc.property dekoratør kjører dekorert funksjonen flere ganger, og hver gang de verdiene som returneres av funksjoner som qc.string () er forskjellige. Med andre ord, er Quick kompatibel med ganske mye hver enhet test rammeverk der ute; det er ikke spesielt krevende.
Funksjoner som qc.str (), qc.int (), og så videre, generere vilkårlige verdier av en viss type. I eksempelet ovenfor, vi hevde at eiendommen gjelder for alle strenger. Når du kjører testene, vil Quick generere randomiserte strenger for testing.
Du vil merke at jeg sa "randomiserte", ikke "tilfeldig". Dette er tilsiktet. Fordelingen av verdiene er forskjøvet til å inkludere interessante verdier, som tomme strenger, eller strenger med NUL tegn i midten, eller strenger som inneholder engelsk tekst. Generelt forsøker Quick å gi en god blanding av smarte vanskelige verdier og tilfeldighet. Dette er egentlig hva du ville gjort hvis du hadde å skrive virkelig grundige testtilfeller for hånd, bortsett fra at du ikke trenger å gjøre det. I praksis har datamaskinen færre forestillinger om hva som er tilregnelig data, så det vil ofte finne feil som aldri ville ha skjedd til deg å skrive testtilfeller for. Den ikke vet hvordan du ubevisst unngå feilene.
Du er ikke begrenset til de innebygde vilkårlige funksjoner. Du kan bruke dem som byggesteiner for å generere din egen. For eksempel:
klasse Point (objekt):
& Nbsp; def __init __ (selv, x, y):
& Nbsp; self.x, self.y = float (x), float (y)
def punkt ():
& Nbsp; "" "Få et vilkårlig punkt." ""
& Nbsp; x = qc.int (-20, 20)
& Nbsp; y = qc.int (-34, 50)
& Nbsp; returnere Point (x, y)
Du kan deretter bruke dette til å generere vilkårlige punkt verdier i eiendommer. Her er en nese-stil test:
@ Qc.property
def test_triangle_inequality ():
& Nbsp; pt = punkt ()
& Nbsp; hevde abs (pt.x) + abs (pt.y)> = Math.sqrt (pt.x ** 2 + pt.y ** 2), (pt.x, pt.y)
Når du kjører denne, noe magisk som skjer: Quick vil prøve å skape vanskelige verdier for både x- og y-variabler i Point klassen, sammen, slik at du får se punkter som (0, 0), (1, 1), ( 0, 1), (385,904, 0), så vel som helt tilfeldige de som (584, -35809648). Med andre ord, i stedet for bare å tegne x og y-verdier fra en strøm av tilfeldige tall med noen vanskelige verdier i det, Quick faktisk vil forsøke å generere vanskelige kombinasjoner av x og y-koordinater.
Funksjoner for å få vilkårlige data
- Int (lav, høy) gir ints, mellom de valgfrie grenser lave og høye.
- Lang (lav, høy) gir lengter, mellom de valgfrie grenser lave og høye.
- Float (lav, høy) gir flyter mellom de valgfrie grenser lave og høye. Ingen infinities eller NaN-verdier.
& Nbsp; str (lengde = Ingen, maxlen = Ingen) gir strenger, av type str. Kodingen er UTF-8. Hvis lengde er gitt, vil strengene være akkurat så lang tid. Hvis maxlen er gitt, vil den strenglengden være mest maxlen tegn.
- Unicode (lengde = Ingen, maxlen = Ingen) gir Unicode-strenger, av type unicode. Hvis lengde er gitt, vil strengene være akkurat så lang tid. Hvis maxlen er gitt, vil den strenglengden være mest maxlen tegn.
- Navn () gir navn, i Unicode. Disse spenner fra den prosaiske, som "John Smith", til eksotiske - navn som inneholder harde mellomrom, eller e-postadresser eller Unicode-tegn utenfor Basic Multilingual Plane. Dette er, om noe, mindre perverse enn navnene vil du se i et tilstrekkelig stort sett av Internett-data.
- NameUtf8 () er det samme som navnet () kode ('utf8')..
- FromList (elementer) returnerer tilfeldige elementer fra en liste. Dette er mest nyttig for å lage dine egne vilkårlige data generatorfunksjoner.
- Randstr (lengde = Ingen, maxlen = sys.maxint) gir strenger av tilfeldige bytes. Hvis lengde er gitt, vil strengene være akkurat så lang tid. Hvis maxlen er gitt, vil den strenglengden være på de fleste maxlen bytes.
Strengene er produsert av str og unicode er randomiserte, men litt innsats har blitt satt til å gjøre dem tilstrekkelig perverse som å avsløre feil i en hel masse strengbehandling kode. Navnelisten er løst basert på forferdelige minner av å se navnet behandling kode krasj på reelle data, om og om igjen og om igjen, som det ble stadig mer klart at verden er gal, og vi er virkelig fortapt. (Denne følelsen går når du får nok testdekning og ting endelig stopper krasje. Det er håp!)
Navnet og streng eksempel data i qc.arbitrary kan være interessant som en kilde til flere deteministic test case data. Føl deg fri til å låne noe av det. Internals er magi, men av de magiske indre deler, de mest interessante er i qc.arbitrary og qc

Krav .

  • Python

Lignende programvare

pytest-timeout
pytest-timeout

20 Feb 15

Attest
Attest

14 Apr 15

vncdotool
vncdotool

12 May 15

BuildBot
BuildBot

17 Feb 15

Kommentarer til qc

Kommentarer ikke funnet
Legg til kommentar
Slå på bilder!