Mox

Mox is a library for defining concurrent mocks in Elixir.

https://github.com/dashbitco/mox

読むべき記事

Mocks and explicit contracts

モックに対する問題意識や思想をJoseが書いた記事

Elixir Test Mocking with Mox

GitHub API Clientの作成のために、 モックサーバーつまりGitHub APIのシミュレータを作ったことによるデメリットを紹介し、 それをMoxを使って改善する話が書いてある。

デメリットは

  • テストを書く際にモックサーバーのリターンを調べなければいけないこと

  • テストがモックサーバーに依存すること

  • explicit contractをClientに定義しなくてよくなってしまうこと

が挙げられている。

また、Moxを使うことで

  • クライアントのモックを作成する

  • ビヘイビアの定義の強制によりexplicit contractを定義できるようになる

  • 使用するライブラリを抽象化し、設計を改善する

点を紹介している。

Elixir Patterns for Testing with Mox

defdelegateを使った例。要復習