Elixir mixでテスト書いてみる
動作環境
- debian 8
- Elixir 1.6.3
はじめ
自宅でElixirを書いているんですが、テスト書いているので備忘録的にまとめていきます。
ElixirでのTest
ExUnit
ElixirのTest frameworkです。これを使ってTest書いていきます。
mixでのTest
まずはmixでプロジェクトを作成し、ひな形を作ります。
mix new example
mixで作成したプロジェクトにはデフォルトでtest
ディレクトリができています。
test
|- example_test.exs
test_helper.exs
example_test.exs
のexample
はmix new example
で作成したプロジェクト名になります。
そして、test_helper.exs
が実際にテストを行います。
test_helper.exs```
ExUnit.start()
`example_test.exs`に実際にテストを書いていきます。
### 簡単なテストを書く
テストする関数は足し算するだけの関数をテストします。
defmodule Example do
@moduledoc """
Documentation for Example.
"""
@doc """
sum method
"""
def sum(a, b) when is_integer(a) and is_integer(b) do
a + b
end
end
`sum`関数をテストしていきますので`example_test.exs`でテストコードを書いていきます。
example_test.exs
defmodule ExampleTest do
use ExUnit.Case
doctest Example
test "sum def" do
assert Example.sum(1, 2) == 3
refute Example.sum(1, 2) != 3
assert_raise FunctionClauseError, fn ->
Example.sum("1", 2) == 3
end
assert_raise FunctionClauseError, fn ->
Example.sum(1, "2") == 3
end
assert_raise UndefinedFunctionError, fn ->
Example.sum(1) == 3
end
end
end
テスト内容をみていきます。
#### assert
`true`か`false`をテストし結果が`true`であることをテストします。
assert Example.sum(1, 2) == 3 # pass
assert Example.sum(1, 2) == 4 # failures
#### refute
`assert`同様、`true`か`false`をテストするのですが、結果が`false`であることをテストします。
refute Example.sum(1, 2) != 3 # pass
refute Example.sum(1, 2) == 3 # failures
#### assert_raise
テストする内容が`exception`を投げるかどうかテストします。
第一引数では`exception`のエラー内容を指定します。第二引数では実行する関数を指定します。
pass
assert_raise FunctionClauseError, fn ->
Example.sum("1", 2) == 3
end
pass
assert_raise UndefinedFunctionError, fn ->
Example.sum(1) == 3
end
## 終わりに
簡単なアサート系のテストを書いてみました。
`ExUnit`モジュールではアサート以外でも`Callbacks`や`CaptureIO`などあるので、
もっと色々と試してみようと思います。