ユニットテストの書き方
mixを使うまでの間、1本のプログラムでユニットテストを書いてゆくには、たとえば以下のように書きます。
add_test.exs
ExUnit.start()
defmodule AddTest do
use ExUnit.Case
test "add test" do
assert 1+1==2
assert 1+2==2
end
end
実行すると、
$ elixir add_test.exs
1) test add test (AddTest)
add_test.exs:4
Assertion with == failed
code: 1 + 2 == 2
lhs: 3
rhs: 2
stacktrace:
add_test.exs:6: (test)
Finished in 0.03 seconds (0.03s on load, 0.00s on tests)
1 test, 1 failure
Randomized with seed 375518
ユニットテスト1日目のコードです。
first_test.exs
ExUnit.start()
defmodule StringTest do
use ExUnit.Case
test "basic" do
assert "abc"<>"def" === "abcdef"
assert String.length("abc") === 3
assert String.slice("abcdef",2..3) === "cd"
assert String.split("abc def"," ") === ["abc","def"]
assert Enum.join(["abc","def"],",") === "abc,def"
assert String.at("abcdef",0) === "a"
assert String.at("abcdef",1) === "b"
assert String.starts_with?("abcdef","abc")
assert String.ends_with?("abcdef","def")
assert String.trim(" abc \n") == "abc"
assert String.upcase("aBc") == "ABC"
assert String.downcase("AbC") == "abc"
assert String.to_integer("16") == 16
assert String.to_integer("1E",16) == 30
end
test "complex" do
assert(Enum.map(["abc","def"],&String.upcase(&1)) == ["ABC","DEF"])
assert Enum.map(["10","20"],&(String.to_integer(&1))) == [10,20]
assert Enum.map(["10","20"],&String.to_integer/1) == [10,20]
with to_i = &(String.to_integer(&1))
do
assert to_i.("10") == 10
assert Enum.map(["10","20"], to_i) == [10,20]
end
with line = "100 200\n"
do
result = line
|> String.trim
|> String.split
|> (Enum.map &String.to_integer(&1)) # to_integer/1
assert result == [100,200]
end
end
test "embed" do
num = 123
assert "num=#{num}" === "num=123"
name = "foo"
assert "name=#{name}" === "name=foo"
assert 'name=#{name}' === 'name=foo'
end
test "regex" do
assert String.to_integer("1E",16) == 30
end
end
defmodule ListTest do
use ExUnit.Case
test "list" do
assert Enum.to_list(1..3) == [1,2,3]
assert [1,2,3]++[4,5,6] == [1,2,3,4,5,6]
assert Enum.concat([1,2,3],[4,5,6]) == [1,2,3,4,5,6]
with n=1,
list=[2,3]
do
assert [n|list] === [1,2,3]
end
with list = [1,2,3]
do
assert (hd list) === 1
assert (tl list) === [2,3]
end
with list = [1,2,3]
do
[head|tail] = list
assert head === 1
assert tail === [2,3]
end
with [first,second] = [1,2]
do
assert first == 1
assert second == 2
end
end
end
その実行結果
$ elixir first_test.exs
.....
Finished in 0.09 seconds (0.08s on load, 0.01s on tests)
5 tests, 0 failures
Randomized with seed 703309
楽しんでね!