Nimble+unittestモジュールでテストを書く
nimbleを使用して
nimble init
でプロジェクトを作成したとき
tests
というディレクトリが生成される
testsディレクトリ配下に t
で始まるファイル名nimというファイルを作成すると、 nimble test
時にテストが走る
例:test1.nim
以下に proctest
というモジュールを作成し、テストする例を記す
ディレクトリ構成
textプロジェクトルート/
┣ src/
┃ ┗ proctest.nim
┗ tests/
┗ test1.nim
test1.nimimport unittest
include proctest
suite "plus":
test "1 + 1":
check plus(1, 1) == 2
test "-1 + 1":
check plus(-1, 1) == 0
proctest.plus
プロシージャは *
をつけていないため、非公開プロシージャである
非公開プロシージャをテストするには include
を使用する
ただし、includeを使用するとincludeしたモジュールにかかれている when isMainModule
ブロックのコードまでテストコードのファイル内に展開されてしまい、テスト時に実行されてしまう
このことは、includeするモジュール内に quit 0
などのプロセスを終了するコードを含められないことを意味する
回避策1
1. たとえば実行ファイルとしてのメイン処理を実装しているモジュールにはプロシージャは書かない
2. テストしたいプロシージャは別モジュールに分ける
3. メインからはそれをincludeする
回避策2
1. メイン処理のブロックを when isMainModule
から when isMainModule and not defined modeTest
と書く
2. tests
ディレクトリ配下に以下のファイルを配置、あるいは追記する
意味
nimble test
が実行される時は tests/config.nims
が読み込まれる
読まれる時に modeTest
というフラグを立てる
メインのモジュールがincludeされたときに modeTest
が立ってる場合はメインブロックが処理されなくなる