问题 Elixir assert_raise不会捕获异常


我写了这个测试用例:

assert_raise ArgumentError, myFn(a,b)

但它没有以我期望的方式评估。 myFn 引发ArgumentError(do: raise ArgumentError),但它没有被捕获 assert_raise

文档中的示例工作得很好:

assert_raise ArithmeticError, fn ->
  1 + "test"
end

从文档:

assert_raise(exception, function)
  断言 exception 在...期间被提出 function 执行。返回获救的异常,否则失败

我猜测在我的测试用例中,首先评估参数。但是我应该怎么写呢?


7245
2018-06-08 13:16


起源



答案:


在函数中包装函数调用是可行的方法。

assert_raise ArgumentError, fn ->
  myFn(a, b)
end

我期望 assert_raise 接受函数调用,但它需要一个函数。


15
2018-06-08 13:25



是, assert_rise 不是宏,而是正常功能: github.com/elixir-lang/elixir/blob/... 这意味着,如果你只是通过 myFn(a, b) 它将被评估,价值将被传递给 assert_rise 已经太晚了:) - tkowal


答案:


在函数中包装函数调用是可行的方法。

assert_raise ArgumentError, fn ->
  myFn(a, b)
end

我期望 assert_raise 接受函数调用,但它需要一个函数。


15
2018-06-08 13:25



是, assert_rise 不是宏,而是正常功能: github.com/elixir-lang/elixir/blob/... 这意味着,如果你只是通过 myFn(a, b) 它将被评估,价值将被传递给 assert_rise 已经太晚了:) - tkowal