pusaka adalah semacam benda tiruan. Perbedaan utama adalah bahwa Anda tidak mengatur harapan sebelumnya. Anda hanya menjalankan kode Anda, menggunakan pusaka di tempat objek lain atau kelas, dan akan merekam apa yang terjadi padanya. Kemudian, setelah kode Anda telah dilakukan, Anda dapat membuat pernyataan tentang apa yang terjadi pada pusaka.
Sebuah pusaka baru dibuat dari kelas Dingus. Anda dapat memberikan dinguses nama, yang membantu dengan debug tes Anda, terutama ketika ada beberapa dinguses dalam bermain.
& Nbsp; >>> dari pusaka impor Dingus
& Nbsp; >>> d = Dingus ('akar')
& Nbsp; >>> d
& Nbsp;
Mengakses atribut dari pusaka akan kembali pusaka baru.
& Nbsp; >>> d.something
& Nbsp;
Ada beberapa pengecualian untuk metode pusaka khusus. Kita akan melihat beberapa dalam sedikit.
Sebuah pusaka juga bisa disebut seperti fungsi atau metode. Tidak peduli berapa banyak argumen yang Anda berikan atau apa argumen-argumen yang. Panggilan untuk pusaka akan selalu kembali objek yang sama, terlepas dari argumen.
& Nbsp; >>> d ()
& Nbsp;
& Nbsp; >>> d ('argumen')
& Nbsp;
& Nbsp; >>> d (55)
& Nbsp;
REKAMAN DAN pernyataan
Setiap saat kita bisa mendapatkan daftar panggilan yang telah dibuat untuk pusaka. Setiap entri dalam daftar panggilan berisi:
& Nbsp; * nama metode yang disebut (atau "()" jika pusaka itu sendiri disebut)
& Nbsp; * Argumen, atau () jika tidak ada
& Nbsp; * The argumnets kata kunci, atau {} jika tidak ada
& Nbsp; * Nilai yang dikembalikan ke pemanggil
Berikut adalah daftar panggilan kami buat untuk d sejauh ini:
& Nbsp; >>> dari pprint impor pprint
& Nbsp; >>> pprint (d.calls)
& Nbsp; [('()', (), {},
& Nbsp; ('()', ('argumen',), {},
& Nbsp; ('()', (55,), {},
Anda dapat menyaring panggilan berdasarkan nama, argumen, dan argumen kata kunci:
& Nbsp; >>> pprint (d.calls ('()', 55))
& Nbsp; [('()', (55,), {},
Jika Anda tidak peduli tentang nilai argumen tertentu, Anda dapat menggunakan nilai DontCare saat penyaringan:
& Nbsp; >>> dari pusaka impor DontCare
& Nbsp; >>> pprint (d.calls ('()', DontCare))
& Nbsp; [('()', ('argumen',), {},
& Nbsp; ('()', (55,), {},
Dinguses dapat melakukan lebih dari sekedar memiliki atribut diakses dan disebut. Mereka mendukung banyak operator Python. Tujuannya adalah untuk memungkinkan, dan merekam, interaksi apapun:
& Nbsp; >>> d = Dingus ('akar')
& Nbsp; >>> (2 ** d.something) ['halo'] () / 100 * 'foo'
& Nbsp;
(Mudah-mudahan rekaman pusaka dunia nyata Anda tidak akan terlihat seperti ini!)
patch
Dingus menyediakan manajer konteks untuk menambal benda selama tes. Sebagai contoh:
& Nbsp; >>> dari pusaka impor Patch
& Nbsp; >>> import urllib2
& Nbsp; >>> dengan Patch ('urllib2.urlopen'):
& Nbsp; ... cetak urllib2.urlopen .__ class__
& Nbsp;
& Nbsp; >>> print urllib2.urlopen .__ class__
& Nbsp;
Anda juga dapat menggunakan ini sebagai dekorator pada metode pengujian Anda:
& Nbsp; >>>patch ('urllib2.urlopen')
& Nbsp; ... def test_something (self):
& Nbsp; ... lulus
& Nbsp; ...
MAGIC BERBAHAYA
Dingus juga dapat secara otomatis mengganti GLOBALS modul ketika menjalankan tes. Hal ini memungkinkan Anda untuk menulis unit test sepenuhnya terisolasi. Lihat contoh / urllib2 / test_urllib2.py untuk contoh. Penulis tidak lagi merekomendasikan fitur ini, karena dapat mendorong tes yang sangat rapuh. Anda harus merasakan rasa sakit mengejek secara manual dependensi; . rasa sakit akan memberitahu Anda ketika kelas bekerja sama dengan terlalu banyak orang lain
Persyaratan :
- Python
Komentar tidak ditemukan