qc ay isang tool sa pagsubok na nagbibigay-daan sumulat ka mga katangian na inaasahan mong upang i-hold totoo, at hayaan ang computer na bumuo ng randomized mga kaso test upang suriin na ang mga katangian ng aktwal na hawakan. & Nbsp; Halimbawa, kung nag-nakasulat na-compress at magbawas ng bigat mga pag-andar para sa ang ilang mga programa ng compression ng data, ang isang halata ari-arian sa pagsubok ay ang pigain at decompressing isang string ay nagbibigay sa likod ng orihinal na string. Narito kung paano mo maaaring ipahayag na:
-import unittest
-import qc
klase TestCompression (unittest.TestCase):
& Nbsp; @ qc.property
& Nbsp; def test_compress_decompress (sa sarili):
& Nbsp; "" ". Pagsubok na pigain at decompressing ang orihinal na data babalik" ""
& Nbsp; data = qc.str () # Ang isang arbitrary string. Ang mga halaga ay randomized.
& Nbsp; self.assertEqual (data, magbawas ng bigat (compress (data)), repr (data))
Iyon ay isang ordinaryong pagsubok na may built-in na unittest framework Python (na siyang dahilan kung bakit may kaya magkano ang boilerplate). Kung hindi naman, maaari mong gawin ang eksaktong parehong bagay sa isang iba't ibang balangkas ng pagsubok, tulad ng Nagnais ng masyadong masalita, masyadong maayang ilong. Ang @ qc.property dekorador ay tumatakbo ang function na pinalamutian nang maraming beses, at sa bawat oras na ang mga halaga na ibinalik ng mga pag-andar tulad ng qc.string () ay magkaiba. Sa ibang salita, QuickCheck ay katugma sa halos bawat yunit ng pagsubok framework out doon; ito ay hindi partikular na hinihingi.
Mga Pag-andar tulad ng qc.str (), qc.int (), at iba pa, lumikha ng arbitrary halaga ng isang tiyak na uri. Sa halimbawa sa itaas, kami ay asserting na ang mga ari-arian hold totoo para sa lahat ng mga string. Kapag pinatakbo mo ang mga pagsubok, QuickCheck ay bubuo ng randomized mga string para sa pagsubok.
Mapapansin mo na ang sinabi ko "randomized," hindi "random". Ito ay intensyonal. Ang pamamahagi ng mga halaga ay tweaked upang isama ang mga kagiliw-giliw na mga halaga, tulad ng walang laman na string, o mga string na may NUL character sa gitna, o mga string na naglalaman ng Ingles na teksto. Sa pangkalahatan, sinusubukan QuickCheck upang bigyan ng mahusay na halo ng matalino nakakalito halaga at randomness. Ito ay totoo kung ano ang gusto mong gawin, kung mayroon kang sumulat ng talagang masinsinang mga kaso ng pagsubok sa pamamagitan ng kamay, maliban sa hindi mo na kailangang gawin ito. Sa pagsasagawa, ang computer ay may mas kaunting mga preconceptions tungkol sa kung ano ang bumubuo matino data, kaya ito ay madalas na mahanap ang mga bug na hindi sana nangyari sa iyo na magsulat ng mga kaso ng pagsubok para sa. Hindi nito alam kung paano subconsciously maiwasan ang mga bug.
Hindi ka limitado sa mga built-in na arbitrary function na halaga. Maaari mong gamitin ang mga ito ng pagbuo ng mga bloke upang bumuo ng iyong sariling. Halimbawa:
klase Point (object):
& Nbsp; def __init __ (sa sarili, x, y):
& Nbsp; self.x, self.y = float (x), float (y)
def point ():
& Nbsp; "" "Kumuha ng isang arbitrary na punto." ""
& Nbsp; x = qc.int (-20, 20)
& Nbsp; y = qc.int (-34, 50)
& Nbsp; bumalik Point (x, y)
Pagkatapos ay maaari mong gamitin ito upang bumuo ng mga di-makatwirang halaga punto sa mga ari-arian. Narito ang isang pagsubok ilong-style:
@ Qc.property
def test_triangle_inequality ():
& Nbsp; pt = punto ()
& Nbsp; igiit ang abs (pt.x) + abs (pt.y)> = math.sqrt (pt.x ** 2 + pt.y ** 2), (pt.x, pt.y)
Kapag nagpatakbo ka ng ito, isang bagay na kaakit-akit ang mangyayari: QuickCheck ay subukan upang bumuo ng nakakalito halaga para sa parehong x at y variable sa klase Point, sama-sama, kaya makakakita ka ng mga punto tulad ng (0, 0), (1, 1), ( 0, 1), (385,904, 0), pati na rin ang ganap na random na mga tulad (584, -35,809,648). Sa ibang salita, sa halip na lamang ang pagguhit x at y mga halaga mula sa isang stream ng random na numero na may ilang mapaglalang mga halaga sa loob nito, QuickCheck ang talagang subukan upang bumuo ng nakakalito kumbinasyon ng mga x at y coordinate.
Mga Function para sa pagkuha ng mga arbitrary na data strong>
- Int (mababa, mataas) ay nagbibigay sa ints, sa pagitan ng hangganan opsyonal mababa at mataas.
- Mahaba (mababa, mataas) ay nagbibigay sa longs, sa pagitan ng hangganan opsyonal mababa at mataas.
- Magpalutang (mababa, mataas) ay nagbibigay sa kamay, sa pagitan ng hangganan opsyonal mababa at mataas. Walang Infinities o Nan halaga.
& Nbsp; STR (haba = Wala, maxlen = Wala) ay nagbibigay sa mga string, uri ng STR. Pag-encode ay UTF-8. Kung haba ay ibinibigay, ang mga string ay eksakto na mahaba. Kung maxlen ay ibinibigay, ang haba ng string ay hindi hihigit sa maxlen character.
- Unicode (haba = Wala, maxlen = Wala) ay nagbibigay sa mga string ng Unicode, ng uri Unicode. Kung haba ay ibinibigay, ang mga string ay eksakto na mahaba. Kung maxlen ay ibinibigay, ang haba ng string ay hindi hihigit sa maxlen character.
- Pangalan ng () ay nagbibigay sa mga pangalan, sa Unicode. Ang mga hanay mula sa pangkaraniwan, tulad ng "John Smith", sa exotic - mga pangalang naglalaman non-breaking na espasyo, o mga email address, o Unicode character sa labas ng Basic Multilingual Plane. Ito ay, kung anuman, mas matigas ang ulo kaysa sa mga pangalan na makikita mo sa isang sapat na malaking hanay ng mga data sa Internet.
- NameUtf8 () ay kapareho ng pangalan ()-e-encode ('UTF8')..
- FromList (mga item) nagbabalik random na mga item mula sa listahan. Ito ay kadalasang kapaki-pakinabang para sa paglikha ng iyong sariling di-makatwirang generator function ng data.
- Randstr (haba = Wala, maxlen = sys.maxint) ay nagbibigay sa mga string ng random na bytes. Kung haba ay ibinibigay, ang mga string ay eksakto na mahaba. Kung maxlen ay ibinibigay, ang haba ng string ay hindi hihigit sa maxlen bytes.
Ang mga string na ginawa ng STR at Unicode ay randomized, ngunit ang ilang mga pagsisikap Nailagay ang paggawa ng mga ito may sapat na bilang matigas ang ulo upang ipakita ang mga bug sa marami ng string pagpoproseso code. Ang listahan ng pangalan ay maluwag batay sa kakila-kilabot mga alaala na makakita ng pag-crash pangalan pagpoproseso ng code sa data sa totoong buhay, paulit-ulit, dahil ito ay naging kailanman mas malinaw na ang mundo ay galit na galit, at kami ay tunay na tiyak na mapapahamak. (Pass pakiramdam na ito sa sandaling makakuha ka ng sapat na coverage ng pagsubok at mga bagay na sa wakas ay ihinto ang pag-crash. May pag-asa!)
Maaaring kawili-wiling bilang isang pinagmumulan ng higit deteministic data ng pagsubok kaso ang pangalan at string halimbawa data sa qc.arbitrary. Huwag mag-atubiling humiram ng anuman sa mga ito. Ang internals ay magic, ngunit sa mga kaakit-akit panloob na mga bahagi, ang pinaka-kagiliw-giliw na mga nasa qc.arbitrary at qc
Mga Kinakailangan :.
- Python
Mga Komento hindi natagpuan