是否可以在Enum.each中包含ExUnit.test语句

时间:2016-01-26 10:22:17

标签: elixir

我正在尝试做这样的事情而不必手动编写一系列test块:

test_cases = %{
  "foo" => 1,
  "bar" => 2,
  "baz" => 3,
}

Enum.each(test_cases, fn({input, expected_output}) ->
  test "for #{input}" do
    assert(Mymodule.myfunction input) == expected_output
  end
end)

但是在运行此代码时,我在undefined function input/0行上收到错误assert(Mymodule.myfunction input) == expected_output

有没有办法达到我想要的目的?

1 个答案:

答案 0 :(得分:8)

是的,您只需unquote input expected_output do块中传递给test/2的{​​{1}}。

test_cases = %{
  "foo" => 1,
  "bar" => 2,
  "baz" => 3,
}

Enum.each test_cases, fn({input, expected_output}) ->
  test "for #{input}" do
    assert Mymodule.myfunction(unquote(input)) == unquote(expected_output)
  end
end

顺便说一句,你在assert行中出现了一个parens错误,因为你只用assert/1作为参数调用Mymodule.myfunction input,而不是Mymodule.myfunction(input) == expected_output(这是表达式)你试图断言)。