Haskell の xUnit ツール HUnit を試す

    はじめに

    Haskell でテストコードを書くツールをしらべてみた.

    メジャーなものは以下

    • doctest
    • QuickCheck
    • HSpec
    • HUnit

    各ツールの特徴

    doctest

    コメントにテストを書くスタイルのツール.

    Python の doctest を haskell に移植したものだとか.

    QuickCheck

    ランダムなテストデータによって関数の性質をテストする.

    xUnit とは異なるコンセプトをもつ.

    HSpec

    xSpec ライクなテストツール.

    Ruby の RSpec にインスパイヤされたらしい.

    記法が BDD 的.

    HUnit

    xUnit ライクなテストツール. JUnit ライク.

    HUnit を試す

    JUnit になじみがあるので, HUnit を試してみた.

    Install

    $ cabal install HUnit

    Usage

    Test.HUnit をインポート.

    import Test.HUnit

    テスト対象コード

    import Data.List
    import Data.Char
    import Unsafe.Coerce
    
    data Nat = Zero
             | Succ Nat
             deriving Show
    
    natToInteger (Succ n) = natToInteger n + 1
    natToInteger Zero = 0

    テストコード

    tests = TestList
            [ "natToInteger 1" ~: natToInteger Zero ~?= 0
            , "natToInteger 2" ~: natToInteger (Succ Zero) ~?= 1
            , "natToInteger 3" ~: natToInteger (Succ (Succ Zero)) ~?= 2
            ]

    テスト実行

    runTestTT (テスト関数名) でテスト実行.

    $ runTestTT tests
    Cases: 3  Tried: 3  Errors: 0  Failures: 0
    Counts {cases = 3, tried = 3, errors = 0, failures = 0}

    わざと失敗させてみる.

    *Main> runTestTT tests
    ### Failure in: 2:natToInteger 3
    expected: 1
     but got: 2
    Cases: 3  Tried: 3  Errors: 0  Failures: 1
    Counts {cases = 3, tried = 3, errors = 0, failures = 1}

    Bookmarks