qc

Software screenshot:
qc
Software detaljer:
Version: 0.1
Upload dato: 14 Apr 15
Udvikler: Peter Scott
Licens: Gratis
Popularitet: 139

Rating: 4.0/5 (Total Votes: 2)

QC er et testværktøj, der lader dig skrive egenskaber, som du forventer at holde stik, og lad computeren generere randomiserede testcases for at kontrollere, at disse egenskaber faktisk holde. & Nbsp; For eksempel, hvis du har skrevet komprimere og dekomprimere funktioner til nogle datakomprimering program, en oplagt egenskab til test er at komprimere og dekomprimere en streng giver tilbage den oprindelige streng. Her er hvordan du kan udtrykke, at:
import unittest
import qc
klasse TestCompression (unittest.TestCase):
& Nbsp; @ qc.property
& Nbsp; def test_compress_decompress (selv-):
& Nbsp; "" ". Test at komprimere og dekomprimere afkast de oprindelige data" ""
& Nbsp; data = qc.str () # Et vilkårligt streng. Værdier er randomiseret.
& Nbsp; self.assertEqual (data, dekomprimere (komprimere (data)), Repr (data))
Det er en almindelig test med Python indbyggede unittest ramme (hvilket er grunden til der er så meget standardtekst). Alternativt kan du gøre præcis de samme ting med en anden test rammer, ligesom den minimalt verbose, ganske behagelig næse. Den @ qc.property dekoratør kører dekorerede funktion flere gange, og hver gang de værdier, der returneres af funktioner som qc.string () er forskellige. Med andre ord, QuickCheck er kompatibel med stort set hver unit test rammer derude; det er ikke særlig krævende.
Funktioner som qc.str (), qc.int (), og så videre, generere tilfældige værdier af en bestemt type. I ovenstående eksempel, vi hævde, at ejendommen gælder for alle strenge. Når du kører testene, vil QuickCheck generere randomiserede strenge til test.
Du vil bemærke, at jeg sagde "randomiseret", ikke "tilfældig". Dette er tilsigtet. Fordelingen af ​​værdier sammenknebne at omfatte interessante værdier, som tomme strenge eller strenge med NUL-tegn i midten, eller strenge, der indeholder engelsk tekst. Generelt QuickCheck forsøger at give en god blanding af smarte vanskelige værdier og tilfældighed. Det er væsentligt, hvad du ville gøre, hvis du skulle skrive virkelig grundige test cases i hånden, bortset fra at du ikke behøver at gøre det. I praksis computeren har færre forestillinger om, hvad der udgør fornuftige data, så det vil ofte finde fejl, der aldrig ville have fundet sted til dig at skrive testcases for. Det er ikke, hvordan man ubevidst undgå bugs.
Du er ikke begrænset til de indbyggede arbitrær værdi funktioner. Du kan bruge dem som byggesten til at generere din egen. For eksempel:
class Punkt (objekt):
& Nbsp; def __init __ (self, x, y):
& Nbsp; self.x, self.y = float (x), float (y)
def point ():
& Nbsp; "" "Get et vilkårligt punkt." ""
& Nbsp; x = qc.int (-20, 20)
& Nbsp; y = qc.int (-34, 50)
& Nbsp; returnere punkt (x, y)
Du kan derefter bruge dette til at generere vilkårlige pointværdier i ejendomme. Her er en næse-style test:
@ Qc.property
def test_triangle_inequality ():
& Nbsp; pt = punkt ()
& Nbsp; hævde abs (pt.x) + abs (pt.y)> = Math.sqrt (pt.x ** 2 + pt.y ** 2), (pt.x, pt.y)
Når du kører det, sker der noget magisk: QuickCheck vil forsøge at generere vanskelige værdier for både x og y variable i punkt klassen sammen, så du kan se punkter som (0, 0), (1, 1), ( 0, 1), (385.904, 0), samt helt tilfældige dem gerne (584, -35.809.648). Med andre ord, i stedet for blot at trække x- og y-værdier fra en strøm af tilfældige tal med nogle vanskelige værdier i det, QuickCheck rent faktisk vil forsøge at generere vanskelige kombinationer af x og y koordinater.
Funktioner for at få vilkårlige data
- Int (lav, høj) giver int'er mellem de valgfrie grænser lave og høje.
- Lang (lav, høj) giver længes, mellem de valgfrie grænser lave og høje.
- Float (lav, høj) giver flåd mellem de valgfrie grænser lave og høje. Ingen Infinities eller NaN værdier.
& Nbsp; str (længde = Ingen, maxlen = Ingen) giver strenge, af typen str. Kodningen er UTF-8. Hvis given længde, vil strengene være præcis så længe. Hvis maxlen er givet, vil strengen længden være mest maxlen tegn.
- Unicode (længde = Ingen, maxlen = Ingen) giver Unicode-strenge, af typen Unicode. Hvis given længde, vil strengene være præcis så længe. Hvis maxlen er givet, vil strengen længden være mest maxlen tegn.
- Navn () giver navne i Unicode. Disse spænder fra den prosaiske, som "John Smith", til de eksotiske - der indeholder ikke-breaking mellemrum, eller e-mail adresser eller Unicode-tegn uden for Basic Multilingual Plane. Det er om noget mindre perverse end navnene vil du se i et tilstrækkeligt stort sæt internetdata.
- NameUtf8 () er det samme som navnet () kode (»utf8")..
- FromList (Artikler) returnerer tilfældige elementer fra en liste. Dette er for det meste nyttigt for at skabe dine egne vilkårlige data generator funktioner.
- Randstr (længde = Ingen, maxlen = sys.maxint) giver strenge af tilfældige bytes. Hvis given længde, vil strengene være præcis så længe. Hvis maxlen er givet, vil strengen længde højst være maxlen bytes.
De er produceret af str og Unicode-strenge er randomiserede, men nogle indsats har været lagt i at gøre dem tilstrækkeligt perverst at afsløre fejl i en hel masse snor behandling kode. Navnelisten er løst baseret på forfærdelige erindringer om at se navn behandling kode nedbrud på den virkelige verden data, igen og igen og igen, da det blev mere og mere klart, at verden er gal, og vi er virkelig dømt. (Denne følelse passerer når du får nok test dækning og ting til sidst stoppe ned. Der er håb!)
Navnet og snor eksempel data i qc.arbitrary kan være interessant som en kilde til flere deteministic test case data. Du er velkommen til at låne noget af det. De interne er magi, men de magiske indre dele, de mest interessante er i qc.arbitrary og QC

Krav :.

  • Python

Lignende software

prego
prego

20 Feb 15

nose-exclude
nose-exclude

20 Feb 15

Kommentarer til qc

Kommentarer ikke fundet
Tilføj kommentar
Tænd billeder!