我正在尝试做这样的事情而不必手动编写一系列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
。
有没有办法达到我想要的目的?
答案 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
(这是表达式)你试图断言)。