Elixir - 如何在doctest中使用别名?
有没有办法在doctests中使用模块别名?我不想每次都输入一个长名字。Elixir - 如何在doctest中使用别名?
defmodule SomeLongModuleName.SubModule do
alias SomeLongModuleName.SubModule, as: SubModule
@doc """
iex> SubModule.method(%{property_a: 1, property_b: 2) # CompileError
3
"""
def method(%{property_a: a, property_b: b) do
a + b
end
end
上面的例子显示了我可能想要使用别名来避免长行的情况。是否可以在doctest中使用别名?
有两种方法我可以想到不必一次又一次键入模块名称。
-
使用插在你的文档和使用别名名称:
defmodule SomeLongModuleName.SubModule do alias SomeLongModuleName.SubModule, as: SubModule @doc """ iex> #{SubModule}.method(%{property_a: 1, property_b: 2}) 3 """ def method(%{property_a: a, property_b: b}) do a + b end end
-
使用只是没有模块和您的来电
doctest
从测试中的功能名称,添加import: true
:defmodule SomeLongModuleName.SubModule do @doc """ iex> method(%{property_a: 1, property_b: 2}) 3 """ def method(%{property_a: a, property_b: b}) do a + b end end
doctest SomeLongModuleName.SubModule, import: true
不错!第一个选项看起来像一个(相当整洁的)黑客,第二个选项看起来就像它是为这种情况准备的。也许切换顺序? – Dylanthepiguy
选项2像一个魅力工作:)谢谢。 – PlagueHammer
事实证明,您可以在测试之前放置一条alias SomeLongModuleName.SubModule, as: SubModule
行。
更好的解决方案是不要在文档中放置太多测试,也不要使用别名。然后,在您的测试文件中,您可以将alias SomeLongModuleName.SubModule, as: SubModule
保存。
正如dylanthepiguy所提到的,将别名放入测试文件中,在doctest
行之前,绝对是一个更好的解决方案。
为您的代码进行测试是恕我直言,代码味道。
另请注意,as: Submodule
是默认值,因此不需要。
大厦从lab419和dylanthepiguy答案:
模块与文档测试:
defmodule SomeLongModuleName.SubModule do
@doc """
iex> SubModule.add(x, y)
3
"""
def add(x, y) do
x + y
end
end
测试用例模块,文档测试:
defmodule SomeLongModuleName.SubModuleTest do
use ExUnit.Case, async: true
# Alias the submodule so we don't have to use the fully qualified name
alias SomeLongModuleName.SubModule
doctest SomeLongModuleName.SubModule, import: true
end
我假设文档测试从全球运行命名空间,所以它将无法看到别名。 – Dylanthepiguy