2020-04-09 23:48:28
【Elixir】Elixirで依存性注入( dependency injection )をモジュールを引数に渡して試す
目次
- 参考にした記事
- 経緯
- 試す
参考にした記事
Lightweight dependency injection in Elixir (without the tears)
経緯
依存性注入はデータベースアクセスを含む処理のユニットテストで非常に重要だという事実が身体に馴染みました。Elixirではどうするのだろうか?と思い立って調べました。
試す
最初に示した参考記事には4つの方法が示されていましたが、一番身体に馴染んだ、モジュールを引数に渡す方法を記載します。
以下コード
defmodule MySampleApp do
def getUserName(user_module) do
user_module.getUserName()
end
end
defmodule FakeUser do
def getUserName do
"FakeUserName"
end
end
defmodule OriginalUser do
def getUserName do
"OriginalUserName"
end
end
以下実行の様子
/home/trial # iex my_sample_app.ex
Erlang/OTP 21 [erts-10.3.5.1] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [hipe]
Interactive Elixir (1.8.1) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> FakeUser |> MySampleApp.getUserName
"FakeUserName"
iex(2)> OriginalUser |> MySampleApp.getUserName
"OriginalUserName"
iex(3)>
未検証ですが、実際のコードではOriginalUser
モジュールはデータベースアクセスのモジュールで、FakeUserName
モジュールはユニットテスト用のモックモジュールで利用される想定です。そのうち自分のブログで試してみます。