testing - 在 elixir 中定义一个常量模块

标签 testing mocking elixir

我想创建一些可变的边界模块。理想情况下,结果看起来像任何其他模块,但行为可以在编译时或在配置文件中设置。我想我正在寻找类似在 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.exsconfig/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/

相关文章:

Haskell - 从任一数据类型生成缺少参数错误消息

hex - 如何获取每个环境的 Elixir 依赖项?

websocket - 相当于 websockets 的wiremock?

java - Mockito:调用层次结构中的模拟对象 - 链式调用

javascript - 如何在 Phoenix (Elixir) 渲染中注入(inject) HTML/使用变量操作 DOM,例如动态插入 SVG 或 PNG?

caching - 如何使用 Elixir ets 创建复杂查询

testing - 什么是故障掩蔽?

angular - [ Angular 7+] : How to unit test a service inside another service spec?

php - 在 PHPSpec stub 上仅模拟一种方法

vue.js - 模拟 GraphQL 查询的响应