Help us understand the problem. What is going on with this article?

Haskellのexecutableなプログラムでテスト自動化

More than 5 years have passed since last update.

対象読者

誰のためか

  • HaskellでExecutableなプログラムの自動テストをしたい人

誰のためでないか

  • Haskellで自作ライブラリの自動テストをしたい人

なにをしたいか

Haskellでテスト自動化をしようと思ったら@kazu_yamamotoさんの秀逸な記事が大変参考になる。
ただ、自作ライブラリ用の内容のため、Executableなプログラムを作成する際には若干のハードルがあったためメモ。

本文

細かい内容はライブラリの場合サンプルを参照。

ライブラリのときとの違いは

  • ディレクトリ構成でMain.hsとその他の.hsファイルの置き場所を変えることと
  • .cabalファイルにlibraryセクションとexecutableセクションを記述すること

ディレクトリ構成

まず、srcディレクトリを作成して、main関数があるファイル以外の.hsファイルを全部その中に入れる。
main関数があるファイルだけ、トップか専用のディレクトリを作ってそこに入れる。

今回は以下の構成になっている。

  • unit-test-bin-example/
    • unit-test-bin-example.cabal
    • Main.hs
    • src/
    • Codec/
      • Base64.hs
    • test/
    • doctests.hs
    • Spec.hs
    • Codec/
      • Base64Spec.hs

.cabalファイルの内容

srcディレクトリ以下の内容をlibraryのセクションに、mainの内容をexecutableのセクションの両方を記述する。
cabal
init
executableをしていした時に作成される.cabalファイルはexecutableセクションしか含まれないため、
cabal buildしたときに<command line>: cannot satisfy -package-id unit-test-bin-example-0.1.0.0-inplaceのエラーで失敗する。

実行

cabal sandbox init -- まだsandbox化してない場合
cabal install --only-dependencies --enable-tests
cabal configure --enable-tests
cabal build
cabal test

でテストできる。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away