2016-01-26 119 views
4

我試圖做這樣的事情不必手動編寫了一系列test塊內部ExUnit.test聲明:是否有可能有一個Enum.each

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) 

但是這段代碼運行時我得到了線路assert(Mymodule.myfunction input) == expected_output上的錯誤undefined function input/0

有沒有辦法實現我想要的?

回答

6

是的,它是可能的,你只需要unquoteinputexpected_output你傳遞給test/2do塊內。

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 

順便說一句,你,你用剛Mymodule.myfunction input作爲參數調用assert/1,而不是Mymodule.myfunction(input) == expected_output(這是你試圖斷言的表達式)曾在assert線括號錯誤。

相關問題