Haskell:
Pisanie testów
Jak to zrobić:
Haskell obsługuje różne frameworki do testowania, ale dwa popularne to Hspec
i QuickCheck
. Hspec pozwala definiować ludzko czytelne specyfikacje dla twojego kodu, podczas gdy QuickCheck pozwala automatycznie generować testy, opisując właściwości, które twój kod powinien spełniać.
Korzystanie z Hspec
Najpierw dodaj hspec
do konfiguracji narzędzia budującego (np. stack.yaml
lub plik cabal
). Następnie zaimportuj Test.Hspec
i napisz testy jako specyfikacje:
-- file: spec/MyLibSpec.hs
import Test.Hspec
import MyLib (add)
main :: IO ()
main = hspec $ describe "MyLib.add" $ do
it "dodaje dwie liczby" $
add 1 2 `shouldBe` 3
it "zwraca pierwszą liczbę przy dodawaniu zera" $
add 5 0 `shouldBe` 5
Następnie uruchom swoje testy za pomocą narzędzia budującego, co może dać taki wynik:
MyLib.add
- dodaje dwie liczby
- zwraca pierwszą liczbę przy dodawaniu zera
Zakończono w 0.0001 sekundy
2 przykłady, 0 porażek
Korzystanie z QuickCheck
Z QuickCheck wyrażasz właściwości, które twoje funkcje powinny spełniać. Dodaj QuickCheck
do konfiguracji projektu, a następnie zaimportuj go:
-- file: 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
Uruchomienie tych testów będzie automatycznie generowało dane wejściowe do sprawdzenia określonych właściwości:
+++ OK, przeszło 100 testów.
+++ OK, przeszło 100 testów.
W przykładach zarówno z Hspec, jak i QuickCheck, zestawy testów służą jako wykonywalna dokumentacja, która może automatycznie weryfikować poprawność Twojego kodu.