我想创建一些可变的边界模块。理想情况下,结果看起来像任何其他模块,但行为可以在编译时或在配置文件中设置。我想我正在寻找类似在 erlang 中定义的东西
假设我有一个 SystemClock 模块和一个 DummyClock 元组模块。理想情况下,时钟模块是在配置文件中选择的上述两个模块之一。
在config/test.ex
define(Clock, {DummyClock, 12345678})
稍后
Clock.now
# => 12345678
在config/prod.ex
define(Clock, SystemClock)
稍后
Clock.now
# => 32145687
最佳答案
我认为最简单的方法是使用配置和 Application.get_env/2
。
在 config/test.exs
config :my_application, clock: DummyClock
在 config/dev.exs
和 config/prod.exs
config :my_application, clock: RealClock
在使用时钟的代码中
defp clock, do: Application.get_env(:my_application, :clock)
def my_function(arg1, arg2) do
now = clock.now
# ...
end
关于testing - 在 elixir 中定义一个常量模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32860342/