qc

Linki sponsorowane:
Screenshot Software:
qc
Szczegóły programowe:
Wersja: 0.1
Filmu: 14 Apr 15
Wywoływacz: Peter Scott
Licencja: Wolny
Popularność: 11

Rating: 4.0/5 (Total Votes: 1)

Linki sponsorowane:

qc jest narzędzie do testowania, które pozwala pisać właściwości, które można oczekiwać, aby uznać za prawdziwe, i niech komputer generowania losowych testów, aby sprawdzić, że właściwości te faktycznie posiadają & nbsp;. Na przykład, jeśli masz napisane kompresji i dekompresji funkcje jakiś program kompresji danych, oczywiste nieruchomość do testu jest to, że kompresji i dekompresji ciąg oddaje oryginalny łańcuch. Oto w jaki sposób można wyrazić, że:
Import unittest
Import qc
Klasa TestCompression (unittest.TestCase):
& Nbsp; @ qc.property
& Nbsp; def test_compress_decompress (self):
& Nbsp; "" ". Badanie, które kompresji i dekompresji zwraca oryginalne dane" ""
& Nbsp; Dane = qc.str () # arbitralne ciąg. Wartości są losowo.
& Nbsp; self.assertEqual (dane, dekompresji (kompresji (dane)), repr (dane))
To zwykłe badanie z wbudowanym unittest ramach Pythona (dlatego jest tak wiele boilerplate). Alternatywnie, można zrobić dokładnie to samo z innym ramach testów, jak minimalnie gadatliwym, dość przyjemnym nosa. @ Qc.property dekorator Uruchamia funkcję urządzone kilka razy, i za każdym razem wartości zwracane przez funkcje jak qc.string () są różne. Innymi słowy, QuickCheck jest kompatybilny z prawie każdym teście ramy tam jednostkowej; to nie jest szczególnie wymagający.
Funkcje, takie jak qc.str () qc.int (), i tak dalej, generować dowolne wartości z określonego typu. W powyższym przykładzie, mamy twierdząc, że nieruchomość jest prawdziwe dla wszystkich ciągów. Po uruchomieniu testów, QuickCheck wygeneruje losowych ciągów do testów.
Zauważysz, że powiedziałem "randomizowane", a nie "random". Jest to zamierzone. Rozkład wartości jest manipulowane, aby to ciekawe wartości, jak puste struny, lub ciągi znaków NUL z w środku, lub ciągi zawierające tekst w języku angielskim. W ogóle, QuickCheck próbuje dać dobre połączenie sprytnych wartości trudnych i przypadkowości. To jest w zasadzie to, co byś zrobił, gdybyś miał napisać bardzo dokładnych testów ręcznie, oprócz tego, że nie musisz tego robić. W praktyce, komputer ma mniej utartym opiniom na temat tego, co stanowi dane rozsądnych, więc będzie to często błędy, które nigdy nie przyszło ci do głowy napisać testów na. Nie wiem, jak podświadomie uniknąć błędów.
Nie jesteś ograniczony do funkcji wbudowanych wartości arbitralne. Można ich używać jako klocki do generowania własnych. Na przykład:
klasy Punkt (obiekt):
& Nbsp; def __init __ (self, x, y):
& Nbsp; self.x, self.y = float (x), pływak (y)
Punkt def ():
& Nbsp; "" "Get dowolny punkt." ""
& Nbsp; x = qc.int (-20, 20)
& Nbsp; r = qc.int (-34, 50)
& Nbsp; powrócić punkt (x, y)
Następnie można wykorzystać do generowania dowolnych wartości punktowe właściwości. Oto test nosa stylu:
@ Qc.property
test_triangle_inequality def ():
& Nbsp; pt = punkt ()
& Nbsp; dochodzić abs () + abs pt.x (pt.y)> = Math.sqrt (pt.x ** 2 + pt.y ** 2), (pt.x, pt.y)
Po uruchomieniu tego, dzieje się coś magicznego: QuickCheck spróbuje wygenerować wartości kłopotliwe zarówno dla zmiennych xiy w klasy Point, razem, więc można zobaczyć, jak punkty (0, 0), (1, 1), ( 0, 1), (385.904, 0), jak również takich jak te całkowicie losowe (584, -35809648). Innymi słowy, zamiast po prostu rysunek wartości X i Y ze strumienia liczb losowych z niektórych trudnych wartości w nim, QuickCheck rzeczywiście starają się generować skomplikowane kombinacje współrzędne x i y.
Funkcje uzyskanie dowolnych danych
- Int (niski, wysoki) daje ints, między opcjonalnych granicach niskich i wysokich.
- Długi (niski, wysoki) daje tęskni, między opcjonalnych granicach niskich i wysokich.
- Float (niski, wysoki) daje pływaków, między opcjonalnych granicach niskich i wysokich. Brak nieskończoności lub NaN wartości.
& Nbsp; str (długość = Brak, maxlen = Brak) daje sznurki, typu ul. Kodowanie UTF-8. Jeśli długość jest podana, struny będzie dokładnie tak długo. Jeśli maxlen jest podana, długość łańcucha znaków będzie co najwyżej maxlen.
- Unicode (długość = Brak, maxlen = Brak) daje Unicode, typu unicode. Jeśli długość jest podana, struny będzie dokładnie tak długo. Jeśli maxlen jest podana, długość łańcucha znaków będzie co najwyżej maxlen.
- Nazwa () daje nazwy, w Unicode. Te od prozaicznych, jak "John Smith", do egzotycznych - nazw zawierających zakaz łamiącym przestrzenie, czy adresy e-mail, lub znaków Unicode poza podstawowe Multilingual Samolotem. To jest, jeśli w ogóle, mniej przewrotna niż nazwy zobaczysz w odpowiednio dużym zestawem danych internetowych.
- NameUtf8 () jest taka sama jak nazwa () kodowania ("utf8")..
- FromList (pozycje) zwraca losowe elementy z listy. Jest to przede wszystkim przydatne do tworzenia własnych dowolnych funkcji generatora danych.
- Randstr (długość = Brak, maxlen = sys.maxint) daje ciągów losowych bajtów. Jeśli długość jest podana, struny będzie dokładnie tak długo. Jeśli maxlen jest podana, długość ciągu będzie co najwyżej maxlen bajtów.
Struny produkowane przez ul i Unicode są losowo, ale niektóre wysiłek został wprowadzony do czyniąc je wystarczająco perwersyjna w celu ujawnienia błędów w całej partii kodu przetwarzania ciąg. Lista nazwisk jest luźno oparty na strasznych wspomnień widząc kodu przetwarzanie Nazwa awarii na danych rzeczywistych, w kółko, w kółko, jak stało się jasne, że coraz więcej jest szalony świat, a my naprawdę skazani. (To uczucie mija, gdy pojawi się dość pokrycie testowe i rzeczy, w końcu przestać upaść. Jest nadzieja!)
Nazwę i przykład ciąg danych w qc.arbitrary może być interesujące jako źródło danych przypadków więcej deteministic Test. Zapraszam do pożyczania z niego nic. Elementy wewnętrzne są magiczne, ale z magicznych elementów wewnętrznych, najciekawsze są qc.arbitrary i qc

Wymagania .

  • Python

Podobne oprogramowanie

pytest-timeout
pytest-timeout

20 Feb 15

pycdep
pycdep

11 May 15

nose-skipreq
nose-skipreq

12 May 15

noselog
noselog

20 Feb 15

Komentarze do qc

Komentarze nie znaleziono
Dodaj komentarz
Włącz zdjęć!