在进行混合测试时添加仅内部测试的应用程序

问题描述 投票:0回答:1

我正在尝试弄清楚如何测试我的项目,并且我打算尝试为我的系统边缘制作假货。就我而言,这是网络,一个 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
的应用程序部分中。这是我不被允许做的事吗?如果没有,我错过了什么?

elixir elixir-mix
1个回答
0
投票

我认为问题在于,虽然该模块称为应用程序,但它不是梁应用程序。

您可能希望将其列出在测试监督树的

children
中,而不是
extra_applications
中。或者完全跳过额外的应用模块,将
GenUdpFake
放入
children
中。

© www.soinside.com 2019 - 2024. All rights reserved.