Haskell:
Письмо тестів

Як:

Haskell підтримує кілька тестових фреймворків, але два популярні - це Hspec і QuickCheck. Hspec дозволяє вам визначати зрозумілі для людини специфікації для вашого коду, тоді як QuickCheck дозволяє автоматично генерувати тести, описуючи властивості, які ваш код повинен задовольняти.

Використання Hspec

Спочатку додайте hspec до конфігурації вашого інструмента збірки (наприклад, у файл stack.yaml або cabal). Потім імпортуйте Test.Hspec та напишіть тести як специфікації:

-- файл: spec/MyLibSpec.hs
import Test.Hspec
import MyLib (add)

main :: IO ()
main = hspec $ describe "MyLib.add" $ do
  it "додає два числа" $
    add 1 2 `shouldBe` 3

  it "повертає перше число при додаванні нуля" $
    add 5 0 `shouldBe` 5

Потім запустіть ваші тести за допомогою вашого інструменту збірки, результат може виглядати так:

MyLib.add
  - додає два числа
  - повертає перше число при додаванні нуля

Завершено за 0.0001 секунди
2 приклади, 0 невдач

Використання QuickCheck

З QuickCheck ви виражаєте властивості, які ваші функції мають задовольняти. Додайте QuickCheck до конфігурації вашого проекту, потім імпортуйте його:

-- файл: 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

Запуск цих тестів автоматично генерує вхідні дані для перевірки зазначених властивостей:

+++ OK, пройшло 100 тестів.
+++ OK, пройшло 100 тестів.

У прикладах як з Hspec, так і з QuickCheck, набори тестів служать як виконувана документація, яка може автоматично перевірити правильність вашого коду.