Elixir
ExUnit

Elixir mixでテスト書いてみる

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.exsexamplemix 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

truefalseをテストし結果がtrueであることをテストします。

assert Example.sum(1, 2) == 3 # pass
assert Example.sum(1, 2) == 4 # failures

refute

assert同様、truefalseをテストするのですが、結果が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モジュールではアサート以外でもCallbacksCaptureIOなどあるので、
もっと色々と試してみようと思います。