हास्केल परीक्षण वर्कफ़्लो


101

मैंने बस एक नया हास्केल प्रोजेक्ट शुरू किया और शुरू से ही एक अच्छा परीक्षण वर्कफ़्लो स्थापित करना चाहता था। ऐसा लगता है कि हास्केल के पास बहुत सारे उत्कृष्ट और अद्वितीय परीक्षण उपकरण हैं और उन्हें एकीकृत करने के कई अलग-अलग तरीके हैं।

मैंने देखा है:

जो सभी अपने डोमेन में बहुत अच्छा काम करते हैं, लेकिन मैं परीक्षण के लिए एक व्यापक दृष्टिकोण की तलाश कर रहा हूं और सोच रहा था कि अन्य लोगों के लिए क्या अच्छा काम किया है।

जवाबों:


70

यूनिट टेस्टिंग, कोड कवरेज, और बेंचमार्क सही होना ज्यादातर सही टूल चुनने के बारे में है।

  • परीक्षण ढांचे सब अपने को चलाने के लिए एक वन-स्टॉप शॉप प्रदान करता है HUnit परीक्षण मामलों और QuickCheck सब एक दोहन से गुण।
  • कोड कवरेज HPC उपकरण के रूप में GHC में बनाया गया है ।
  • मानदंड कुछ बहुत बढ़िया बेंचमार्किंग मशीनरी प्रदान करता है

मैं एक चल उदाहरण के रूप में उपयोग करूँगा जो मैंने अभी यूनिट परीक्षण, कोड कवरेज और बेंचमार्क के साथ सक्षम करना शुरू किया था:

http://github.com/ekmett/speculation

आप अपने परीक्षण और बेंचमार्क को सीधे अपने केबल फ़ाइल में उनके लिए अनुभाग जोड़कर, और उन्हें झंडे के पीछे से जोड़कर एकीकृत कर सकते हैं ताकि वे ऐसा न करें ताकि आपके पुस्तकालय के प्रत्येक उपयोगकर्ता को (और खुद के लिए उपयोग करना चाहते हैं) ) आपके द्वारा चुने गए परीक्षण उपकरणों का सटीक संस्करण।

http://github.com/ekmett/speculation/blob/master/speculation.cabal

फिर, आप अपने परीक्षण सूट को चलाने के बारे में कैबेल को बता सकते हैं। जैसा कि कैबल परीक्षण अभी तक मौजूद नहीं है - हमारे पास इस वर्ष की कोड की गर्मियों के लिए एक छात्र है! - हमारे पास सबसे अच्छा तंत्र यह है कि यहां कैबेल के उपयोगकर्ता हुक तंत्र का उपयोग कैसे किया जाए। इसका मतलब है कि 'कस्टम' बिल्ड का कैबेल के साथ स्विच करना और टेस्टहुक सेट करना। TestHook का एक उदाहरण जो टेस्ट-फ्रेमवर्क के साथ लिखे गए टेस्ट प्रोग्राम को चलाता है, और फिर hpc को प्रोफाइल पर लागू करता है, यह यहाँ पाया जा सकता है:

http://github.com/ekmett/speculation/blob/master/Setup.lhs

और फिर आप QuickCheck और HUnit परीक्षणों को एक कार्यक्रम में बंडल करने के लिए परीक्षण-ढांचे का उपयोग कर सकते हैं:

http://github.com/ekmett/speculation/blob/master/Test.hs

कोडल फ़ाइल को चालू करने के लिए कोड कवरेज परीक्षण को सक्षम करने के लिए -fhpc चालू करने के लिए सावधान है, और फिर Setup.lhs में testHook मैन्युअल रूप से hpc चलाता है और अपने डिस्ट डिर में अपना आउटपुट लिखता है।

बेंचमार्किंग के लिए, कहानी थोड़ा और मैनुअल है, कोई 'कैबेल बेंचमार्क' विकल्प नहीं है। आप अपने बेंचमार्क को अपने परीक्षण हुक में तार कर सकते हैं, लेकिन मैं उन्हें हाथ से चलाना पसंद करता हूं, क्योंकि मानदंड में बहुत अधिक ग्राफिकल रिपोर्टिंग विकल्प हैं। आप अपने बेंचमार्क को ऊपर दिखाए गए अनुसार कैबल फ़ाइल में जोड़ सकते हैं, उन्हें अलग-अलग संकलन झंडे दे सकते हैं, उन्हें एक काबल ध्वज के पीछे छिपा सकते हैं, और फिर सभी भारी उठाने के लिए मानदंड का उपयोग कर सकते हैं:

http://github.com/ekmett/speculation/blob/master/Benchmark.hs

फिर आप अपने बेंचमार्क को कमांड लाइन से चला सकते हैं और बेंचमार्क परिणामों के साथ पॉप-अप केडीई विंडो प्राप्त कर सकते हैं, आदि।

चूंकि हास्केल कोड विकसित करते समय आप कैबेल में रहते हैं, इसलिए यह आपके टूलचिन को इसके साथ एकीकृत करने के लिए बहुत मायने रखता है।

संपादित करें : काबाल परीक्षण समर्थन अब मौजूद है। Http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/developing-packages.html#test-suites देखें


2
और cabal benchअब भी मौजूद है।
nh2

6
सच। मैं को इंगित होता github.com/ekmett/lens कैसे से निपटने के लिए की एक और अधिक आधुनिक उदाहरण के रूप में cabal testऔर cabal bench, मिश्रण HUnit, doctestऔर quickcheckसाथ आधारित परीक्षण criterionमानक। speculationभविष्यवाणी में कोड cabal testऔर cabal bench
एडवर्ड KMETT 17

2
@EdwardKmett: मैंने देखा कि लैन्स पैकेज में केवल एग्जॉस्टकोड- stdio-1.0 टेस्ट सूट इंटरफ़ेस का उपयोग किया जाता है। कैबल उपयोगकर्ता गाइड बताता है, कि `` यह पसंद किया जाता है कि विस्तृत-1.0 इंटरफ़ेस के लिए नए परीक्षण सूट लिखे जाएं ''। उस पर कोई टिप्पणी?
कोप्टन

9
@ कोपटन उन्होंने इसे कभी लागू नहीं किया। उस दस्तावेज़ीकरण को वापस लेने और गोली मारने की आवश्यकता है।
एडवर्ड केएमईटी

2
दुर्भाग्य से, लिंक को सभी मास्टर शाखा को इंगित करने के लिए, और ऐसा लगता है कि परीक्षण से संबंधित सब कुछ केबल फाइल से हटा दिया गया है, इसलिए लिंक प्रभावी रूप से टूट गए हैं।
एंड्रयू थैडियस मार्टिन

52

दृष्टिकोण RWH ch 11 में अधिवक्ता है और XMonad में लगभग है:

एक बार जब आपके प्रमुख इनवेरिएंट क्विकचेक के माध्यम से स्थापित हो जाते हैं, तो आप उन परीक्षणों को टाइप इनवायरिअंट्स में स्थानांतरित करना शुरू कर सकते हैं।

आपके प्रयासों का समर्थन करने के लिए अभ्यास:

  • हर कमिट पर एक सरलीकृत क्विकचेक रिग्रेशन चलाएं।
  • HPC कवरेज विवरण प्रकाशित करें।

14

परीक्षण ढांचे पैकेज सचमुच कमाल है। आप आसानी से HUnit और क्विकचेक परीक्षणों को एकीकृत कर सकते हैं, और कई आउटपुट लक्ष्यों के साथ, कमांड-लाइन झंडे के आधार पर केवल निर्दिष्ट सुइट चलाने वाले निष्पादन योग्य प्राप्त कर सकते हैं।

परीक्षण और रूपरेखा हालांकि अलग-अलग जानवर हैं। प्रोफाइलिंग के लिए, मैं एक अलग निष्पादन योग्य सेट करूँगा जो केवल उस अनुभाग पर बल देता है जिसे आप प्रोफाइल करना चाहते हैं, और प्रोफाइलिंग बिल्ड और रन के परिणामों को ध्यान से देख रहे हैं (साथ ही -ऑफ़्टी-ऑटो-सभी संकलन के लिए और एक रनटाइम के लिए RTS -p झंडा)।


परीक्षण-ढांचे के लिए एक अधिक सक्रिय रूप से बनाए रखा उत्तराधिकारी स्वादिष्ट है
सजाकोबी

10

परीक्षण के लिए, मैं HUnit और क्विकचेक गुणों पर भरोसा करता हूं और सभी यूनिट परीक्षणों और सभी क्विकचेक गुणों को स्वचालित रूप से इकट्ठा करने के लिए हास्केल टेस्ट फ्रेमवर्क का उपयोग करता हूं ।

अस्वीकरण: मैं हास्केल टेस्ट फ्रेमवर्क का मुख्य डेवलपर हूं।


5
स्टीफन, इस पर बहुत कम प्रलेखन है। मुझे लगता है कि अलोकप्रिय रहने के लिए यह प्राथमिक कारण है। यहाँ एक सवाल निश्चित रूप से आपके ध्यान देने लायक है: stackoverflow.com/questions/8919556/testing-with-htf
Nikita Volkov

2
HTF की नई रिलीज़ 0.9.0.0 अब काफी दस्तावेज के साथ आती है। इसके अलावा, मैंने विकास को github.com/skogsbaer/HTF में स्थानांतरित कर दिया । मुझे उम्मीद है कि इससे लोगों को HTF का उपयोग करने और HTF के बारे में सवाल पूछने में आसानी होगी। ऐसा करने के लिए स्वतंत्र महसूस करें!
स्टेफेनवेहर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.