週刊Elixirライブラリ2015-18
Elixirのライブラリの解説を週ごとにお届けする記事です。
解説が間違っていた場合には、コメントか@hayabusa333にご連絡くださると嬉しいです。
今回はExParametarizedについて
# ExParametarized is 何?
ExParametarizedは、ElixirのUnitTestで使用するパラメータの定義をMacroにて行い、パラメータ系のテストを簡単に増やすことができるライブラリです。
# 実行環境
OS:OS X Yosemite
Erlang:Eshell V6.5, OTP-Version 18
Elixir:v1.0.4
# ExParametarizedの実行を行うための新規プロジェクトの作成
$ mix new my_ex_parametarized $ cd my_ex_parametarized
# HexにてExParametarizedをインストールするために設定ファイルの記載を行う
$ vim mix.exs
mix.exsの内容は下記となります。
defmodule MyExParametarized.Mixfile do use Mix.Project def project do [app: :my_ex_parametarized, version: "0.0.1", elixir: "~> 1.0", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, deps: deps] end # Configuration for the OTP application # # Type `mix help compile.app` for more information def application do [applications: [:logger]] end # Dependencies can be Hex packages: # # {:mydep, "~> 0.3.0"} # # Or git/path repositories: # # {:mydep, git: "https://github.com/elixir-lang/mydep.git", tag: "0.1.0"} # # Type `mix help deps` for more examples and options defp deps do [{:ex_parametarized, "~> 0.4.1"}] end end
# 依存関係の解決を行います。
$ mix deps.get
# テスト様にコードを記載
$ vim lib/my_ex_parametarized.ex
ExParametarizedがメソッドの引数でも使用できることを確認するため、確認用のコードを記載
defmodule MyExParametarized do def add(a, b) do a + b end end <|| <span class="deco" style="font-weight:bold;"># テストコードを記載</span> >|| $ vim test/my_ex_parametarized_test.exs
ExParametarizedを実際に使用したテストコードを記載
defmodule MyExParametarizedTest do use ExUnit.Case, async: true use ExUnit.Parametarized # ExParametarized # ExParametarized のサンプルコードを記載 test_with_params "add params", fn (a, b, expected) -> assert a + b == expected end do [ #{a, b, expected} というふうにパラメータが設定される {1, 2, 3}, # 正常にテストが成功するパターン {1, 4, 3}, # テストが失敗するパターン "fail_test": {1, 4, 50} # テストが失敗し、テストの結果に"fail_test" と記載されるパターン ] end # メソッドの引数としてパラメータが使用できることも確認 test_with_params "add params method", fn (a, b, expected) -> assert MyExParametarized.add(a, b) == expected end do [ {1, 2, 3}, "fail_test": {1, 4, 50} ] end # ExParametarized自体がMacroで記載されているため引数を複数指定しても動くことを確認 test_with_params "add params2", fn (a, b, c, d, e, f, g, h, i, j, k, l, m, n, expected) -> assert a + b + c + d + e + f + g + h + i + j + k + l + m + n == expected end do [ {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3}, ] end end
# ExParametarized を実行してみる
$ mix test 1) test add params_fail_test_num2 (MyExParametarizedTest) test/my_ex_parametarized_test.exs:5 Assertion with == failed code: a + b == expected lhs: 5 rhs: 50 stacktrace: test/my_ex_parametarized_test.exs:5 . 2) test add params method_fail_test_num1 (MyExParametarizedTest) test/my_ex_parametarized_test.exs:16 Assertion with == failed code: MyExParametarized.add(a, b) == expected lhs: 5 rhs: 50 stacktrace: test/my_ex_parametarized_test.exs:16 . 3) test add params_num1 (MyExParametarizedTest) test/my_ex_parametarized_test.exs:5 Assertion with == failed code: a + b == expected lhs: 5 rhs: 3 stacktrace: test/my_ex_parametarized_test.exs:5 4) test add params2_num0 (MyExParametarizedTest) test/my_ex_parametarized_test.exs:26 Assertion with == failed code: a + b + c + d + e + f + g + h + i + j + k + l + m + n == expected lhs: 14 rhs: 3 stacktrace: test/my_ex_parametarized_test.exs:26 Finished in 0.06 seconds (0.06s on load, 0.00s on tests) 6 tests, 4 failures
# まとめ
今回はElixirのExUnitを拡張するExParametarizedというライブラリを紹介いたしました。
一度、テストケースを作成してしまえばパラメータを増やすことにより強化値やパラメータ系のテストを簡単に増やすことができるので皆様使用してみてはいかがでしょうか?
それでは皆さま、良いElixirライフを