Haskell:
Skrive tester

Hvordan:

Haskell støtter forskjellige testrammeverk, men to populære er Hspec og QuickCheck. Hspec lar deg definere menneskelesbare spesifikasjoner for koden din, mens QuickCheck lar deg generere tester automatisk ved å beskrive egenskaper som koden din bør tilfredsstille.

Bruke Hspec

Først, legg til hspec i konfigurasjonen til byggeverktøyet ditt (f.eks. stack.yaml eller cabal-filen). Deretter importerer du Test.Hspec og skriver tester som spesifikasjoner:

-- fil: spec/MyLibSpec.hs
import Test.Hspec
import MyLib (add)

main :: IO ()
main = hspec $ describe "MyLib.add" $ do
  it "legger til to tall" $
    add 1 2 `shouldBe` 3

  it "returnerer det første tallet når man legger til null" $
    add 5 0 `shouldBe` 5

Deretter kjører du testene dine ved hjelp av byggeverktøyet ditt, noe som resulterer i en utskrift som kan se slik ut:

MyLib.add
  - legger til to tall
  - returnerer det første tallet når man legger til null

Fullført på 0.0001 sekunder
2 eksempler, 0 feil

Bruke QuickCheck

Med QuickCheck uttrykker du egenskaper som funksjonene dine bør tilfredsstille. Legg til QuickCheck i prosjektkonfigurasjonen din, deretter importerer du den:

-- fil: 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

Å kjøre disse testene vil automatisk generere inndata for å sjekke de angitte egenskapene:

+++ OK, besto 100 tester.
+++ OK, besto 100 tester.

I begge eksemplene med Hspec og QuickCheck fungerer testsuitene som kjørbar dokumentasjon som automatisk kan verifisere korrektheten av koden din.