4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Tokyo.ex #8 LT toku_bass

Last updated at Posted at 2018-03-15

whoami

スクリーンショット 2017-11-26 13.07.12.png

  • 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

=でパターンマッチの場合

スクリーンショット 2017-11-24 11.20.36.png

ExUnit.Case

スクリーンショット 2017-11-24 11.17.34.png

PowerAssert

スクリーンショット 2017-11-24 11.17.06.png

==比較

exunit_equal.png

ExUnit.Case

差分は見やすい

exunit_equal_result.png

PowerAssert

すべて赤文字で出力されてしまうが、差分は出力してくれる

power_assert_equal_result.png

match?

assert match?(patter,expr)

ExUnit

スクリーンショット 2017-11-24 11.27.05.png

PowerAssert

変数の中身が表示されない

スクリーンショット 2017-11-24 11.27.18.png

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をマージして==で比較すればいいのでは

作ったもの

struct_assert

デモ

テストを実行してみる

struct_assert_test.exs

callback_test.exs

おわりに

今後の豊富

  • ライブラリ書いてく
  • CPANのエコシステム(を導入できるといいなぁ)
    • CPAN Testers
4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?