在elixir中定义一个常量模块

时间:2015-09-30 07:31:11

标签: testing mocking elixir

我想创建一些可更改的边界模块。理想情况下,结果看起来像任何其他模块,但行为可以在编译时或配置文件中设置。我想我正在寻找像erlang中的定义

假设我有一个SystemClock模块和一个DummyClock元组模块。理想情况下,Clock模块将是配置文件中选择的两个模块中的一个或另一个。

config/test.ex

define(Clock, {DummyClock, 12345678})

后来

Clock.now
# => 12345678

config/prod.ex

define(Clock, SystemClock)

后来

Clock.now
# => 32145687

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是使用配置和Application.get_env/2

config/test.exs

中的

config :my_application, clock: DummyClock
<{1}}和config/dev.exs

中的

config/prod.exs

在使用时钟的代码中

config :my_application, clock: RealClock