Haskell:
Skriva tester

Hur gör man:

Haskell stöder olika testramverk, men två populära är Hspec och QuickCheck. Hspec låter dig definiera människoläsbara specifikationer för din kod, medan QuickCheck låter dig generera tester automatiskt genom att beskriva egenskaper som din kod bör uppfylla.

Använda Hspec

Först, lägg till hspec i din byggverktygskonfiguration (t.ex. stack.yaml eller cabal-fil). Importera sedan Test.Hspec och skriv tester som specifikationer:

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

main :: IO ()
main = hspec $ describe "MyLib.add" $ do
  it "lägger till två nummer" $
    add 1 2 `shouldBe` 3

  it "returnerar det första numret när noll läggs till" $
    add 5 0 `shouldBe` 5

Kör sedan dina tester med ditt byggverktyg, vilket resulterar i en output som kan se ut så här:

MyLib.add
  - lägger till två nummer
  - returnerar det första numret när noll läggs till

Avslutad på 0.0001 sekunder
2 exempel, 0 fel

Använda QuickCheck

Med QuickCheck uttrycker du egenskaper som dina funktioner bör uppfylla. Lägg till QuickCheck i din projektinställning, importera den sedan:

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

När du kör dessa tester kommer ingångarna att genereras automatiskt för att kontrollera de specificerade egenskaperna:

+++ OK, godkända 100 tester.
+++ OK, godkända 100 tester.

I både Hspec- och QuickCheck-exemplen tjänar testsuiterna som exekverbar dokumentation som automatiskt kan verifiera korrektheten i din kod.