whoami
-
Perl
- YAPC運営
-
hex.pm
- Elixir歴2ヶ月弱
- 10/29 Elixir初心者向けハンズオン vol2 お世話になりました
本題
map,struct用のテストフレームワークを作った話
構造体やMapのテストの一部だけテストしたいとき、一つずつ書くのが面倒
これを
assert Map.get(msg1, "name") == "Foo"
assert Map.get(msg1, "token") == "AAAAA"
こういう感じでかきたい
assert msg1, %{ "name" => "foo", token => "AAAAA"}
車輪の再発明?
調べたけど、なさそう -> ほんとか?
とりあえず、再発明でもいいから勉強がてら書こう
調査記録
ExUnitとPowerAssert
=
でパターンマッチの場合
ExUnit.Case
PowerAssert
==
比較
ExUnit.Case
差分は見やすい
PowerAssert
すべて赤文字で出力されてしまうが、差分は出力してくれる
match?
assert match?(patter,expr)
ExUnit
PowerAssert
変数の中身が表示されない
patternの側に変数が使えない
Kernel.match?
の実装はただのcase
defmacro match?(pattern, expr) do
quote do
case unquote(expr) do
unquote(pattern) ->
true
_ ->
false
end
end
end
できるといいこと
match?で==
のような綺麗な差分を出したい
match?でpatternの側にも変数を使いたい
ExUnitの実装に乗っかる
- お手軽にライブラリつくりたい
- 無理して作ってテストライブラリにバグがあるのは最悪
- Mapをマージして
==
で比較すればいいのでは
作ったもの
デモ
テストを実行してみる
おわりに
今後の豊富
- ライブラリ書いてく
- CPANのエコシステム(を導入できるといいなぁ)
- CPAN Testers