qc

Software screenshot:
qc
Rincian Software:
Versi: 0.1
Tanggal Upload: 14 Apr 15
Pengembang: Peter Scott
Lisensi: Gratis
Popularitas: 23

Rating: 4.0/5 (Total Votes: 2)

qc adalah alat pengujian yang memungkinkan Anda menulis properti yang Anda harapkan untuk terus benar, dan biarkan komputer menghasilkan kasus uji acak untuk memeriksa bahwa sifat ini benar-benar memegang & nbsp;. Misalnya, jika Anda telah menulis kompres dan dekompresi fungsi untuk beberapa program kompresi data, properti yang jelas untuk menguji adalah bahwa kompresi dan dekompresi string memberikan kembali string asli. Berikut adalah bagaimana Anda bisa menyatakan bahwa:
impor unittest
impor qc
kelas TestCompression (unittest.TestCase):
& Nbsp; @ qc.property
& Nbsp; def test_compress_decompress (self):
& Nbsp; "" ". Uji bahwa kompresi dan dekompresi kembali data asli" ""
& Nbsp; data = qc.str () # Sebuah string yang sewenang-wenang. Nilai tersebut secara acak.
& Nbsp; self.assertEqual (data, dekompresi (kompres (data)), Repr (data))
Itu tes biasa dengan built-in kerangka unittest Python (itulah sebabnya mengapa ada begitu banyak boilerplate). Sebagai alternatif, Anda bisa melakukan hal yang sama persis dengan kerangka pengujian yang berbeda, seperti minimal verbose, hidung cukup menyenangkan. The @ qc.property dekorator menjalankan fungsi dihiasi beberapa kali, dan setiap kali nilai yang dikembalikan oleh fungsi seperti qc.string () berbeda. Dengan kata lain, QuickCheck kompatibel dengan hampir semua tes unit kerangka luar sana; itu tidak terlalu menuntut.
Fungsi seperti qc.str (), qc.int (), dan sebagainya, menghasilkan nilai-nilai sewenang-wenang dari jenis tertentu. Dalam contoh di atas, kita menegaskan bahwa properti berlaku untuk semua string. Ketika Anda menjalankan tes, QuickCheck akan menghasilkan string acak untuk pengujian.
Anda akan melihat bahwa saya mengatakan "acak", bukan "acak". Hal ini disengaja. Distribusi nilai tweak untuk memasukkan nilai-nilai yang menarik, seperti string kosong, atau string dengan karakter NUL di tengah, atau string yang berisi teks bahasa Inggris. Secara umum, QuickCheck mencoba memberikan campuran yang baik dari nilai-nilai rumit pintar dan keacakan. Ini pada dasarnya apa yang akan Anda lakukan, jika Anda harus menulis kasus uji benar-benar menyeluruh dengan tangan, kecuali bahwa Anda tidak perlu melakukannya. Dalam prakteknya, komputer memiliki prasangka sedikit tentang apa yang merupakan data yang waras, sehingga akan sering menemukan bug yang tidak akan pernah terjadi kepada Anda untuk menulis kasus uji untuk. Ia tidak tahu bagaimana untuk sadar menghindari bug.
Anda tidak terbatas pada fungsi nilai sewenang-wenang built-in. Anda dapat menggunakannya sebagai blok bangunan untuk menghasilkan sendiri. Sebagai contoh:
class Titik (object):
& Nbsp; def __init __ (self, x, y):
& Nbsp; self.x, self.y = mengambang (x), float (y)
Titik def ():
& Nbsp; "" "Mendapatkan sembarang titik." ""
& Nbsp; x = qc.int (-20, 20)
& Nbsp; y = qc.int (-34, 50)
& Nbsp; kembali Titik (x, y)
Anda kemudian dapat menggunakan ini untuk menghasilkan nilai-nilai titik sembarang di properti. Berikut adalah tes hidung-style:
@ Qc.property
def test_triangle_inequality ():
& Nbsp; pt = titik ()
& Nbsp; menegaskan abs (PT.X) + abs (pt.y)> = Math.sqrt (PT.X ** 2 + pt.y ** 2), (PT.X, pt.y)
Ketika Anda menjalankan ini, sesuatu yang ajaib terjadi: QuickCheck akan mencoba untuk menghasilkan nilai-nilai sulit untuk kedua x dan y variabel di kelas Point, bersama-sama, sehingga Anda akan melihat poin seperti (0, 0), (1, 1), ( 0, 1), (385.904, 0), serta yang benar-benar acak seperti (584, -35809648). Dengan kata lain, bukan hanya menggambar x dan y dari aliran nomor acak dengan beberapa nilai rumit di dalamnya, QuickCheck akan benar-benar mencoba untuk menghasilkan kombinasi rumit dari x dan y koordinat.
Fungsi untuk mendapatkan data sewenang-wenang
- Int (rendah, tinggi) memberikan int, antara batas opsional rendah dan tinggi.
- Panjang (rendah, tinggi) memberikan rindu, antara batas opsional rendah dan tinggi.
- Mengambang (rendah, tinggi) memberikan mengapung, antara batas opsional rendah dan tinggi. Tidak terhingga atau NaN nilai.
& Nbsp; str (panjang = None, maxlen = None) memberikan string, tipe str. Encoding adalah UTF-8. Jika panjang diberikan, string akan persis yang panjang. Jika maxlen diberikan, panjang string akan karakter paling maxlen.
- Unicode (panjang = None, maxlen = None) memberikan string unicode, tipe unicode. Jika panjang diberikan, string akan persis yang panjang. Jika maxlen diberikan, panjang string akan karakter paling maxlen.
- Nama () memberikan nama, di Unicode. Ini berkisar dari biasa, seperti "John Smith", ke eksotis - nama yang mengandung spasi non-breaking, atau alamat email, atau karakter Unicode luar Basic Multilingual Plane. Hal ini, jika ada, kurang menyimpang dari nama-nama Anda akan melihat dalam satu set yang cukup besar data internet.
- NameUtf8 () adalah sama dengan nama () encode ('utf8')..
- FromList (item) kembali item acak dari daftar. Hal ini sebagian besar berguna untuk membuat sewenang-wenang fungsi pembangkit data Anda sendiri.
- Randstr (panjang = None, maxlen = sys.maxint) memberikan string byte random. Jika panjang diberikan, string akan persis yang panjang. Jika maxlen diberikan, panjang string akan paling maxlen byte.
String yang dihasilkan oleh str dan unicode yang acak, tetapi beberapa upaya telah dimasukkan ke dalam membuat mereka cukup sesat untuk mengungkapkan bug di seluruh banyak kode pengolahan tali. Daftar Nama longgar didasarkan pada kenangan mengerikan melihat kode pengolahan nama kecelakaan pada data dunia nyata, berulang-ulang, karena menjadi semakin jelas bahwa dunia ini sudah gila, dan kita benar-benar hancur. (Perasaan ini melewati setelah Anda mendapatkan cakupan tes yang cukup dan hal akhirnya berhenti menerjang. Ada harapan!)
Nama dan tali contoh data dalam qc.arbitrary mungkin menarik sebagai sumber data uji kasus yang lebih deteministic. Jangan ragu untuk meminjam semua itu. Internal yang ajaib, tetapi dari bagian internal ajaib, yang paling menarik adalah di qc.arbitrary dan qc

Persyaratan :.

  • Python

Software yang serupa

expecter
expecter

20 Feb 15

dfuzz
dfuzz

12 May 15

lava-test
lava-test

20 Feb 15

nbdebug
nbdebug

11 May 15

Komentar untuk qc

Komentar tidak ditemukan
Tambahkan komentar
Aktifkan gambar!