.
qc siz & nbsp doğru keçirilməsi və kompüter bu xüsusiyyətləri həqiqətən keçirilməsi yoxlamaq üçün randomizə test hallarda yaratmaq imkan gözləyirik xassələri yazmaq imkan verir ki, test vasitədir, məsələn, siz kompres yazılı və funksiyaları decompress əgər Bəzi data compression proqram, test açıq-aşkar bir əmlak kompressor və simli bacardılar orijinal simli geri verir. Burada ifadə necə var:
idxal unittest
idxal qc
sinif TestCompression (unittest.TestCase):
& Nbsp; @ qc.property
& Nbsp; def test_compress_decompress (özünü):
& Nbsp; "" ". Test ki, sıxılması və qaytarır orijinal data bacardılar" ""
& Nbsp; data = qc.str () # bir ixtiyari string. Dəyərlər randomizə olunur.
& Nbsp; self.assertEqual (data, decompress (kompres (data)), Repr (data))
Bu (belə çox Demirbaş var nə olan) Python daxili unittest çərçivəsində adi test var. Alternativ olaraq, siz minimal verbose, olduqca xoş burun kimi fərqli bir test çərçivəsində eyni şey edə bilər. @ Qc.property decorator bəzədilmiş funksiyası bir neçə dəfə çalışır və hər dəfə dəyərlər () fərqli qc.string kimi funksiyaları ilə döndü. Başqa sözlə, QuickCheck orada olduqca çox hər vahid test çərçivəsində uyğun; xüsusilə tələb deyil.
Qc.str kimi funksiyaları (), qc.int (), və s, müəyyən bir növü ixtiyari dəyərlər yaratmaq. Yuxarıdakı misalda, biz bütün əmlak strings üçün doğru aparır ki, müdafiə edirik. Testlər çalıştırdığınızda, QuickCheck test üçün randomizə strings yaradır.
Mən, "randomizə", "təsadüfi" söylədi ki, görəcəksiniz. Bu qəsdən edir. dəyərləri paylanması English mətn olan maraqlı dəyərlər, boş strings kimi, və ya orta NUL simvol ilə strings və ya strings daxil tweaked olunur. Ümumiyyətlə, QuickCheck ağıllı çətin dəyərlər və randomness yaxşı mix vermək üçün çalışır. Bu, bunu yoxdur ki, istisna olmaqla, əl ilə həqiqətən hərtərəfli test hallarda yazmaq idi əgər, nə hansı əhəmiyyətli deyil. Təcrübədə, kompüter ağlı başında data nədən az ön var, belə ki, tez-tez test hallarda yazmaq üçün sizə baş heç vaxt hataları tapa bilərsiniz. Bu subconsciously hataları qarşısını almaq üçün necə deyil.
Siz daxili ixtiyari dəyər funksiyaları məhdud deyilik. Siz öz yaratmaq üçün bloklar kimi istifadə edə bilərsiniz. Məsələn:
class Point (obyekt):
& Nbsp; def __init __ (özünü, x, y):
& Nbsp; self.x, self.y = float (x), float (y)
def nöqtəsi ():
& Nbsp; "" "ixtiyari point alın." ""
& Nbsp; x = qc.int (-20, 20)
& Nbsp; y = qc.int (-34, 50)
& Nbsp; Point geri (x, y)
Daha sonra xassələri ixtiyari point dəyərləri yaratmaq üçün istifadə edə bilərsiniz. Burada burun-stil test var:
@ Qc.property
def test_triangle_inequality ():
& Nbsp; pt = nöqtəsi ()
& Nbsp; ABS (pt.x) + ABS müdafiə (pt.y)> = math.sqrt (pt.x ** 2 + pt.y ** 2), (pt.x, pt.y)
Bu çalıştırdığınızda, sehrli bir şey olur: (0: 0), (1, 1), (kimi xal görmək lazımdır, belə ki QuickCheck birlikdə, Point sinif x və y həm dəyişənlər üçün çətin dəyərlər yaratmaq üçün çalışacağıq (584 kimi 0, 1) (385904, 0), eləcə də tamamilə təsadüfi olanlar, -35809648). Başqa sözlə, yalnız bəzi çətin dəyərləri ilə təsadüfi ədəd bir axın x və y dəyərlər rəsm deyil, QuickCheck, həqiqətən, x və y koordinatları çətin birləşməsi yaratmaq üçün çalışacağıq.
Ixtiyari məlumat almaq üçün funksiyaları
- (Aşağı yüksək) int aşağı və yüksək isteğe həddi arasında ints verir.
- Uzun (aşağı, yüksək) aşağı və yüksək isteğe həddi arasında longs verir.
- (Aşağı yüksək) float aşağı və yüksək isteğe həddi arasında üzüb gedirdi verir. No Infinities və ya NaN dəyərlər.
& Nbsp; küç (uzunluğu = Yox, maxlen = None) növü küç, strings verir. encoding UTF-8. Uzunluğu verilir, strings məhz uzun olacaq. Maxlen verilir, simli uzunluğu ən maxlen simvol olacaq.
- Unicode (uzunluğu = Yox, maxlen = None) növü Unicode ki, unicode strings verir. Uzunluğu verilir, strings məhz uzun olacaq. Maxlen verilir, simli uzunluğu ən maxlen simvol olacaq.
- Adı () Unicode adları verir. Əsas Multilingual Plane kənarda qeyri-breaking boşluq, və ya e-poçt ünvanları və ya Unicode simvol olan adlar - ekzotik "John Smith" kimi, nəsr bu sıra. Adları az batil bir şey, Internet məlumatların kifayət qədər böyük bir set görəcəksiniz, bu, var.
- NameUtf8 () adı eyni () (utf8) kodlar..
- FromList (items) bir siyahıdan təsadüfi maddələr qaytarır. Bu öz ixtiyari data generator funksiyaları yaratmaq üçün çox faydalıdır.
- Randstr (uzunluğu = Yox, maxlen = sys.maxint) təsadüfi bayt strings verir. Uzunluğu verilir, strings məhz uzun olacaq. Maxlen verilir, simli uzunluğu bytes maxlen ən olacaq.
str və Unicode tərəfindən istehsal strings randomizə, lakin bəzi səy string emal kodu bütövlükdə çox bugs aşkar onlara kifayət qədər batil edilməsi verilmişdir. adı siyahısı azad dünya dəli olduğunu daha aydın oldu ki, daha çox və üzərində, real-dünya data adı emal kodu qəza görən dəhşətli xatirələrini əsaslanır və biz, həqiqətən, məhkumdur. (Əgər kifayət qədər test əhatə və nəhayət şaqqıltılı dayandırmaq şeyi almaq sonra bu hiss ümid var. Keçir!)
qc.arbitrary adı və simli Məsələn data daha deteministic test data mənbəyi kimi maraqlı ola bilər. Hər hansı bir bu borc çekinmeyin. daxili sehrli, lakin sehrli daxili təbəqələrinin, ən maraqlı olanları qc.arbitrary və QC olan
tələblər .
- Python
Şərhlər tapılmadı