Nao000のぶろぐ

蝶を追っている少年になりたい

【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モジュールはユニットテスト用のモックモジュールで利用される想定です。そのうち自分のブログで試してみます。