Haskell:
Testien kirjoittaminen
Kuinka:
Haskell tukee erilaisia testauskehyksiä, mutta kaksi suosittua ovat Hspec
ja QuickCheck
. Hspec antaa sinun määritellä ihmislukuisia erittelyjä koodillesi, kun taas QuickCheck antaa sinun automaattisesti generoida testejä kuvailemalla ominaisuuksia, joita koodisi tulisi tyydyttää.
Käyttäen Hspeciä
Ensimmäisenä, lisää hspec
rakennustyökalusi konfiguraatioon (esim. stack.yaml
tai cabal
tiedosto). Sen jälkeen, tuo Test.Hspec
ja kirjoita testit eritelmiksi:
-- tiedosto: spec/MyLibSpec.hs
import Test.Hspec
import MyLib (add)
main :: IO ()
main = hspec $ describe "MyLib.add" $ do
it "lisää kaksi numeroa" $
add 1 2 `shouldBe` 3
it "palauttaa ensimmäisen numeron kun lisätään nolla" $
add 5 0 `shouldBe` 5
Tämän jälkeen, aja testisi käyttäen rakennustyökaluasi, jolloin saat tuloksen, joka saattaa näyttää tältä:
MyLib.add
- lisää kaksi numeroa
- palauttaa ensimmäisen numeron kun lisätään nolla
Valmis 0.0001 sekunnissa
2 esimerkkiä, 0 epäonnistumisia
Käyttäen QuickCheckiä
QuickCheckin kanssa ilmaiset ominaisuudet, jotka funktiosi tulisi tyydyttää. Lisää QuickCheck
projektiisi konfiguraatioon, sitten tuo se:
-- tiedosto: test/MyLibProperties.hs
import Test.QuickCheck
import MyLib (add)
prop_addAssociative :: Int -> Int -> Int -> Bool
prop_addAssociative x y z = x + (y + z) == (x + y) + z
prop_addCommutative :: Int -> Int -> Bool
prop_addCommutative x y = x + y == y + x
main :: IO ()
main = do
quickCheck prop_addAssociative
quickCheck prop_addCommutative
Näiden testien ajaminen autogeneroi syötteitä tarkistamaan määritellyt ominaisuudet:
+++ OK, läpäisi 100 testiä.
+++ OK, läpäisi 100 testiä.
Sekä Hspec- että QuickCheck-esimerkeissä, testisarjat toimivat suoritettavina dokumentaatioina, jotka voivat automaattisesti varmentaa koodisi oikeellisuuden.