我正在尝试弄清楚如何测试我的项目,并且我打算尝试为我的系统边缘制作假货。就我而言,这是网络,一个 udp 套接字。为此,我将启动一个 GenServer 来管理“伪造的”打开连接。我似乎无法制作一个仅测试的应用程序并在不混合的情况下添加它。鉴于我在
test/support
中定义的这个应用程序
defmodule MyProjectTest.Application do
use Application
def start(_type, _args) do
children = [
GenUdpFake,
]
opts = [strategy: :one_for_one, name: MyProjectTest.Supervisor]
Supervisor.start_link(children, opts)
end
end
我尝试在我的 mix.exs 中使用以下内容
def application do
[
mod: {MyProject.Application, []},
extra_applications: [:logger, :runtime_tools] ++ extra_applications(Mix.env())
]
end
defp extra_applications(:test) do
[MyProjectTest.Application]
end
defp extra_applications(_) do
[]
end
我运行时总是出现以下错误
mix test
。
** (Mix) Could not start application Elixir.MyProjectTest.Application: could not find application file: Elixir.MyProjectTest.Application.app
但是,我什至进入了构建文件夹并发现了
_build/test/lib/my_project/ebin/Elixir.MyProjectTest.Application.beam
。我什至在模块下的my_project.app
中找到了它,但没有在应用程序下找到它。所以,我很困惑我做错了什么。我似乎找不到任何有关添加不依赖于 extra_application:
属性的应用程序的信息。混合文档并没有真正告诉我更多信息。应用程序文档实际上没有说什么。我很确定我想要的只是 'Elixir.MyProjectTest.Application'
包含在 my_project.app
的应用程序部分中。这是我不被允许做的事吗?如果没有,我错过了什么?
我认为问题在于,虽然该模块称为应用程序,但它不是梁应用程序。
您可能希望将其列出在测试监督树的
children
中,而不是 extra_applications
中。或者完全跳过额外的应用模块,将GenUdpFake
放入children
中。