Mendapatkan pengujian unit, cakupan kode, dan tolok ukur yang tepat sebagian besar tentang memilih alat yang tepat.
- test-framework menyediakan tempat terpadu untuk menjalankan semua kasus pengujian HUnit dan properti QuickCheck Anda, semuanya dari satu harness.
- Cakupan kode dibangun ke dalam GHC dalam bentuk alat HPC .
- Kriteria menyediakan beberapa mesin pembandingan yang cukup bagus
Sebagai contoh, saya akan menggunakan paket yang baru saja saya aktifkan dengan pengujian unit, cakupan kode, dan tolok ukur:
http://github.com/ekmett/speculation
Anda dapat mengintegrasikan tes dan benchmark Anda langsung ke file cabal Anda dengan menambahkan bagian untuk mereka, dan menutupinya di belakang bendera sehingga mereka tidak membuatnya sehingga setiap pengguna perpustakaan Anda harus memiliki akses ke (dan ingin menggunakannya sendiri ) versi persis alat pengujian yang Anda pilih.
http://github.com/ekmett/speculation/blob/master/speculation.cabal
Kemudian, Anda dapat memberi tahu komplotan rahasia tentang cara menjalankan rangkaian pengujian Anda. Karena tes komplotan rahasia belum ada - kami memiliki siswa yang mengerjakannya untuk kode musim panas tahun ini! - mekanisme terbaik yang kita miliki adalah Berikut adalah cara menggunakan mekanisme hook pengguna komplotan rahasia. Ini berarti beralih ke build 'Kustom' dengan komplotan rahasia dan menyiapkan testHook. Contoh testHook yang menjalankan program pengujian yang ditulis dengan test-framework, lalu menerapkan hpc ke profil, dapat ditemukan di sini:
http://github.com/ekmett/speculation/blob/master/Setup.lhs
Dan kemudian Anda dapat menggunakan kerangka uji untuk menggabungkan pengujian QuickCheck dan HUnit ke dalam satu program:
http://github.com/ekmett/speculation/blob/master/Test.hs
File komplotan rahasia di sana dengan hati-hati mengaktifkan -fhpc untuk mengaktifkan pengujian cakupan kode, dan kemudian testHook di Setup.lhs secara manual menjalankan hpc dan menulis outputnya ke direktori dist Anda.
Untuk benchmarking, ceritanya sedikit lebih manual, tidak ada opsi 'cabal benchmark'. Anda dapat memasukkan benchmark Anda ke dalam test hook, tetapi saya suka menjalankannya secara manual, karena Criterion memiliki begitu banyak opsi pelaporan grafis. Anda dapat menambahkan benchmark Anda ke file cabal seperti yang ditunjukkan di atas, memberi mereka flag kompilasi terpisah, menyembunyikannya di balik flag cabal, dan kemudian menggunakan Criterion untuk melakukan semua tugas berat:
http://github.com/ekmett/speculation/blob/master/Benchmark.hs
Anda kemudian dapat menjalankan benchmark Anda dari baris perintah dan mendapatkan jendela KDE pop-up dengan hasil benchmark, dll.
Karena dalam praktiknya Anda tinggal di komplotan rahasia saat mengembangkan kode Haskell, sangat masuk akal untuk mengintegrasikan toolchain Anda dengannya.
Sunting : Dukungan tes Cabal sekarang sudah ada. Lihat http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/developing-packages.html#test-suites
cabal bench
sekarang juga ada.cabal test
dancabal bench
, pencampuranHUnit
,doctest
danquickcheck
tes berbasis dengancriterion
tolok ukur. Kode dispeculation
predatescabal test
dancabal bench
.Pendekatan ini dianjurkan di RWH ch 11 dan di XMonad kira-kira:
Setelah invarian utama Anda ditetapkan melalui QuickCheck, Anda dapat mulai memfaktorkan ulang, memindahkan pengujian tersebut ke dalam invarian tipe.
Praktik untuk mendukung upaya Anda:
sumber
The paket tes-framework benar-benar mengagumkan. Anda dapat dengan mudah mengintegrasikan pengujian HUnit dan QuickCheck, serta mendapatkan file executable yang menjalankan rangkaian tertentu saja, berdasarkan tanda baris perintah, dengan beberapa target keluaran.
Pengujian dan pembuatan profil adalah binatang yang berbeda. Untuk pembuatan profil, saya akan menyiapkan executable terpisah yang menekankan hanya bagian yang ingin Anda buat profil, dan hanya melihat dengan cermat hasil pembuatan dan pelaksanaan pembuatan profil (dengan -prof-auto-all untuk kompilasi dan + RTS -p untuk runtime bendera).
sumber
Untuk pengujian, saya mengandalkan properti HUnit dan QuickCheck dan menggunakan Kerangka Uji Haskell untuk mengumpulkan semua pengujian unit dan semua properti QuickCheck secara otomatis.
Penafian: Saya adalah pengembang utama Kerangka Uji Haskell.
sumber