Birim testi, kod kapsamı ve karşılaştırmaları doğru yapmak çoğunlukla doğru araçları seçmekle ilgilidir.
- test çerçevesi, tüm HUnit test durumlarınızı ve QuickCheck özelliklerinizi tek bir kablo demetinden çalıştırmak için tek noktadan bir mağaza sağlar .
- Kod kapsamı, HPC aracı biçiminde GHC'ye yerleştirilmiştir .
- Criterion, oldukça iyi kıyaslama makineleri sağlar
Çalışan bir örnek olarak, birim testi, kod kapsamı ve kıyaslamalar ile etkinleştirmeye yeni başladığım bir paketi kullanacağım:
http://github.com/ekmett/speculation
Testlerinizi ve karşılaştırmalı değerlendirmelerinizi, bunlar için bölümler ekleyerek ve bunları bayrakların arkasına maskeleyerek doğrudan cabal dosyanıza entegre edebilirsiniz, böylece kütüphanenizdeki her kullanıcının erişebilmesi (ve kendileri için kullanmak istemesi) ) seçtiğiniz test araçlarının tam sürümü.
http://github.com/ekmett/speculation/blob/master/speculation.cabal
Ardından, Cabal'a test süitinizi nasıl çalıştıracağınızı anlatabilirsiniz. Cabal testi henüz mevcut olmadığından - bu yılki kod yazında üzerinde çalışan bir öğrencimiz var! - Elimizdeki en iyi mekanizma İşte cabal'ın kullanıcı kanca mekanizmasının nasıl kullanılacağı. Bu, cabal ile 'Özel' bir yapıya geçmek ve bir testHook kurmak anlamına gelir. Test çerçevesi ile yazılmış bir test programını çalıştıran ve ardından hpc'yi profile uygulayan bir testHook örneği burada bulunabilir:
http://github.com/ekmett/speculation/blob/master/Setup.lhs
Ardından, QuickCheck ve HUnit testlerini tek bir programda toplamak için test çerçevesini kullanabilirsiniz:
http://github.com/ekmett/speculation/blob/master/Test.hs
Buradaki cabal dosyası, kod kapsamı testini etkinleştirmek için -fhpc'yi açmaya dikkat eder ve ardından Setup.lhs'deki testHook hpc'yi manuel olarak çalıştırır ve çıktısını dist dizine yazar.
Kıyaslama için hikaye biraz daha manueldir, 'kabal kıyaslama' seçeneği yoktur. Kriterlerinizi test kancanıza bağlayabilirsiniz, ancak Criterion çok sayıda grafik raporlama seçeneğine sahip olduğu için bunları elle çalıştırmayı seviyorum. Karşılaştırmalarınızı yukarıda gösterildiği gibi cabal dosyasına ekleyebilir, onlara ayrı derleme bayrakları verebilir, onları bir cabal bayrağının arkasına gizleyebilir ve ardından tüm ağır işleri yapmak için Kriter'i kullanabilirsiniz:
http://github.com/ekmett/speculation/blob/master/Benchmark.hs
Daha sonra karşılaştırmalarınızı komut satırından çalıştırabilir ve karşılaştırma sonuçlarını içeren açılır KDE pencereleri vb. Alabilirsiniz.
Pratikte Haskell kodunu geliştirirken yine de cabal'da yaşadığınız için, araç zincirinizi onunla entegre etmek çok mantıklı.
Düzenleme : Cabal testi desteği artık var. Bkz. Http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/developing-packages.html#test-suites
cabal bench
şimdi de var.