読者です 読者をやめる 読者になる 読者になる

はわわーっ

はわわわわっ

cabalでビルドとテスト

ちょっと前にHaskellの単体テスト最前線 - あどけない話を読んで試してみようと思ってたのをやってみた。

ディレクトリ構成は

hello/
  hello.cabal
  src/
    Hello.hs
  test/
    HelloSpec.hs
    Spec.hs

こんな感じ。

ファイルの中身は

-- src/Hello.hs

main :: IO ()
main = putStrLn("hello")
-- test/HelloSpec.hs

module HelloSpec where

import Test.Hspec

spec :: Spec
spec = do
  describe "hello test" $ do
    it "test" $ 3 `shouldBe` (3 :: Int)

  describe "hello test2" $ do
    it "hogehoge" $ "foo" `shouldBe` "foo"

こんな感じになってる。ほとんど何もない。

あとは test/Spec.hs に

{-# OPTIONS_GHC -F -pgmF hspec-discover #-}

の1行を書いておく。
たぶん、自動でテストを探してうまいことやってくれるのかな。

あとは cabal のファイルを書く。
よくわかってなくてけっこうな時間悩んだ。
とりあえず動くようになったけど、これでいいのかは分かってない。

-- hello.cabal

name: hello
version: 0.0
build-type: Simple
cabal-version: >=1.8

executable hello
  main-is: Hello.hs
  hs-source-dirs: src
  ghc-options: -Wall
  build-depends: base

test-suite spec
  type: exitcode-stdio-1.0
  main-is: Spec.hs
  hs-source-dirs: test
  ghc-options: -Wall
  build-depends: base, hspec >= 1.3

ビルドとかテストは

% cabal configure --enable-tests
% cabal build
% cabal test

でできる。