在 ExUnit 测试中使用下划线 (_)
Use underscore (_) in ExUnit tests
我的 elixir 应用程序中有一个方法,比方说 Some.Module.func/1
,即 returns 两个数字的元组。我在 ExUnit 中编写测试,只需要测试元组中的第一个元素,并不真正关心第二个元素。
到目前为止,我已经尝试这样做了:
test "some method" do
assert Some.Module.func(45) == {54, _}
end
但我只是在 运行 测试时得到这个错误:
Compiled lib/some.ex
Generated some app
** (CompileError) test/some_test.exs:7: unbound variable _
(stdlib) lists.erl:1353: :lists.mapfoldl/3
(stdlib) lists.erl:1354: :lists.mapfoldl/3
为什么这不起作用,我如何忽略测试中不需要的结果?
使用 ==
时,不能像 assert 那样匹配。您可以使用 =
执行以下操作:
test "some method" do
assert {54, _} = Some.Module.func(45)
end
请注意,顺序已颠倒,因为 _
只能出现在 =
运算符的左侧,否则您将收到一个 CompileError
,这就是您想要的正在获得:
iex(3)> 3 = _
** (CompileError) iex:3: unbound variable _
(elixir) src/elixir_translator.erl:17: :elixir_translator.translate/2
您还可以这样做:
test "some method" do
{result, _} = Some.Module.func(45)
assert result == 54
end
这可能适用于您想要对结果执行多个断言的情况。
我的 elixir 应用程序中有一个方法,比方说 Some.Module.func/1
,即 returns 两个数字的元组。我在 ExUnit 中编写测试,只需要测试元组中的第一个元素,并不真正关心第二个元素。
到目前为止,我已经尝试这样做了:
test "some method" do
assert Some.Module.func(45) == {54, _}
end
但我只是在 运行 测试时得到这个错误:
Compiled lib/some.ex
Generated some app
** (CompileError) test/some_test.exs:7: unbound variable _
(stdlib) lists.erl:1353: :lists.mapfoldl/3
(stdlib) lists.erl:1354: :lists.mapfoldl/3
为什么这不起作用,我如何忽略测试中不需要的结果?
使用 ==
时,不能像 assert 那样匹配。您可以使用 =
执行以下操作:
test "some method" do
assert {54, _} = Some.Module.func(45)
end
请注意,顺序已颠倒,因为 _
只能出现在 =
运算符的左侧,否则您将收到一个 CompileError
,这就是您想要的正在获得:
iex(3)> 3 = _
** (CompileError) iex:3: unbound variable _
(elixir) src/elixir_translator.erl:17: :elixir_translator.translate/2
您还可以这样做:
test "some method" do
{result, _} = Some.Module.func(45)
assert result == 54
end
这可能适用于您想要对结果执行多个断言的情况。