Elixir assert_raise不会捕获异常

Fil*_*und 13 elixir ex-unit

我写了这个测试用例:

assert_raise ArgumentError, myFn(a,b)
Run Code Online (Sandbox Code Playgroud)

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

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

assert_raise ArithmeticError, fn ->
  1 + "test"
end
Run Code Online (Sandbox Code Playgroud)

从文档:

assert_raise(exception, function)
断言exceptionfunction执行期间引发.返回已获救的异常,否则失败

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

Fil*_*und 19

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

assert_raise ArgumentError, fn ->
  myFn(a, b)
end
Run Code Online (Sandbox Code Playgroud)

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

  • 是的,'assert_rise`是不是宏,但正常功能:https://github.com/elixir-lang/elixir/blob/f4a378f158b00aae0f2ee1c211eccc4314ecec01/lib/ex_unit/lib/ex_unit/assertions.ex#L498这意味着,如果你只是传递`myFn(a,b)`它将被评估,值将被传递给`assert_rise`,这已经太晚了:) (2认同)