Вы можете использовать обратный вызов on_exit
в блоке setup
. Основная часть функции настройки запускается перед каждым тестом (таким образом, он считывает текущее значение), затем обратный вызов on_exit
запускается после каждого теста (так что он может вернуть все обратно в их исходные значения).
defmodule MyTest do
use ExUnit.Case
setup do
date_time_api = Application.get_env(:my_app, :date_time_api)
on_exit(
fn ->
Application.put_env(:my_app, :date_time_api, date_time_api)
end
)
end
# Tests, fixtures follow...
end
Помните, что важно, чтобы ваш код подчинялся конфигурации времени выполнения, доступной в Приложении, поэтому ваш код может выглядеть примерно так:
def utc_now do
Application.get_env(:my_app, :date_time_api).utc_now()
end
С соответствующим значением конфигурации, например,
# config/config.exs or env-specific config file
config :my_app, date_time_api: DateTimeApi
Это то, что заставляет все это работать, потому что приложение будет разрешать имя модуля (то есть реальное или фиктивное) во время выполнения.