--- breaks: false tags: public-tech --- # Dune で環境変数によって動かすテストを変える この記事は [OCaml Tips Advent Calendar 2022](https://adventar.org/calendars/8396) の二日目です。 超絶重いテストがあるときに、そのテストを有効化するフラグを作って、 そのフラグが立っているときにだけそのテストを動かしたいとします。 例えば Alcotest を使っている場合 ``` "string-concat", [ test_case "String mashing" `Quick test_str_concat ]; "list-concat", [ test_case "List mashing" `Slow test_list_concat ]; ``` のように `test_case` に渡すフラグを変えることでこれが実現できます。 しかし Alcotest を使っていない場合や、テストの前処理の段階で時間がかかる場合には、 この方法は採用できません。 そのような場合に、Dune 側でテストの有効・無効を環境変数の値によって切り替えることができます。 まず `test/` ディレクトリ配下に、遅いテスト専用のディレクトリを作っておきます。 ``` $ mkdir test/slow ``` 続いて `test/slow/dune` ファイルを作ります。ここで `enabled_if` stanza を使って 環境変数 `ENABLE_SLOW_TEST` の値を確認し、値が `1` であればこのテストを有効化します。 ``` $ vim test/slow/dune (tests (names test_slow_hello) (libraries yourfavname alcotest) (enabled_if (= 1 %{env:ENABLE_SLOW_TEST=0}))) ``` テストを書きます。普通のテストと比較できるように、このテストはコケるようにしておきます。 ```ocaml= $ vim test/slow/test_slow_hello.ml open Yourfavname let test_hello () = assert (Hello.hello () <> (* ← 本当は = *) "Hello, World!"); () let () = let open Alcotest in run "Hello" [ ("hello-function", [ test_case "unit" `Quick test_hello ]) ] ``` テストを実行します。 ``` $ dune runtest # 通る $ ENABLE_SLOW_TEST=1 dune runtest # 落ちる ``` ## 参考 - https://github.com/ocaml/dune/issues/2132
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up