2015-10-02 9 views
8

अगर मैंमेरे परीक्षण विफल होने पर मेरा HUnit परीक्षण सूट क्यों पास हो जाता है?

module Main where 

import Test.HUnit 

test1 :: Test 
test1 = TestCase $ assertEqual "Should be one" 1 5 

test2 :: Test 
test2 = TestCase $ assertEqual "Shold both be zero" 0 0 

main :: IO Counts 
main = runTestTT $ TestList [test1, test2, test1] 

साथ test/Test.hs है और

test-suite my-test 
    type:    exitcode-stdio-1.0 
    hs-source-dirs:  test 
    main-is:   Test.hs 
    build-depends:  base >= 4.8.1.0 && <4.9, 
         HUnit >= 1.3 
    default-language: Haskell2010 

के साथ एक .cabal और मैं cabal test --show-details='always' चलाने तो मैं मिल

Test suite my-test: RUNNING... 
### Failure in: 0 
test/Test.hs:6 
Should be one 
expected: 1 
but got: 5 
### Failure in: 2 
test/Test.hs:6 
Should be one 
expected: 1 
but got: 5 
Cases: 3 Tried: 3 Errors: 0 Failures: 2 
Test suite my-test: PASS 

अपने परीक्षण सूट पास करता है क्यों जब मैं मिला है विफलताओं? इसी तरह, अगर मैं cabal sdist मुझे कोई चेतावनी नहीं है कि मेरे परीक्षण विफल हो गए हैं।

उत्तर

4
Cabal users' guide के अनुसार

,

टेस्ट exitcode-stdio-1.0 इंटरफ़ेस का उपयोग कर सुइट्स निष्पादनयोग्य कि एक गैर शून्य से बाहर निकलें कोड के साथ परीक्षण विफलता का संकेत है जब चलाने कर रहे हैं; वे मानक आउटपुट और त्रुटि चैनलों के माध्यम से मानव-पठनीय लॉग जानकारी प्रदान कर सकते हैं।

आप

main :: IO Counts 
main = runTestTT $ TestList [test1, test2, test1] 

यह परीक्षण चलाता है, परीक्षण जानकारी बाहर प्रिंट, और फिर हमेशा सफलतापूर्वक बाहर निकल जाता है परिभाषित किया है। यदि आप चाहते हैं कि कैबल को पता चल गया है कि परीक्षण विफल हो गया है, तो आपको Counts पर कब्जा करने की आवश्यकता है, errors और failures के लिए जांचें, और यदि आपको ऐसा लगता है तो गैर-शून्य स्थिति से बाहर निकलें।

main :: IO() 
main = do 
    results <- runTestTT $ TestList [test1, test2, test1] 
    if (errors results + failures results == 0) 
    then 
     exitWith ExitSuccess 
    else 
     exitWith (ExitFailure 1) 

test-framework पैकेज सुविधाजनक defaultMain कार्यों कि बात इस तरह की कर प्रदान करता है; आप उस दृष्टिकोण पर विचार करना चाह सकते हैं।

आपको ध्यान रखना चाहिए कि exitcode-stdio-1.0 इंटरफ़ेस अर्द्ध-बहिष्कृत माना जाता है; कैबल रखरखाव करने वालों को अपने अधिक Haskellian detailed-0.9 इंटरफेस पर स्विच करने की सलाह देते हैं।

+0

मैंने 'विस्तृत-0.9' में देखा था, लेकिन [vibe मिला] (http://stackoverflow.com/a/18686329/656912) कि यह कम स्थिर और उपयोग करने में कठोर था। – orome

+0

@raxacoricofallapatorius, हो सकता है। मैंने कभी भी गड़बड़ नहीं की है; मैंने केवल मौजूदा परियोजनाओं में मौजूदा परीक्षण सूट का विस्तार किया है। – dfeuer

+0

@dfeuer: मैंने 'ExitSuccess' और 'ExitFailure' के साथ अपना दृष्टिकोण उपयोग किया है, लेकिन अगर मैं' कैबल टेस्ट - शो-विवरण = 'हमेशा' चलाता हूं तो यह किसी कारण से काम नहीं करता है - बिल्ड टेस्ट सूट कहता है: पास भी एक विफलता है। क्या आप कृपया कामकाज की सिफारिश कर सकते हैं? – altern

संबंधित मुद्दे