ho scritto questo banco di prova:Elixir assert_raise non cattura eccezioni
assert_raise ArgumentError, myFn(a,b)
ma non valuta nel modo che ci si aspetterebbe. myFn
genera un ArgumentError (do: raise ArgumentError
), ma non viene rilevato da assert_raise
.
L'esempio nella documentazione funziona bene:
assert_raise ArithmeticError, fn ->
1 + "test"
end
Dalla documentazione:
assert_raise(exception, function)
afferma laexception
viene sollevata durante l'esecuzionefunction
. Restituisce l'eccezione salvata, altrimenti fallisce
Suppongo che nel mio caso di test, gli argomenti vengano valutati per primi. Ma come dovrei averlo scritto?
Sì, 'assert_rise' non è una macro, ma funziona normalmente: https://github.com/elixir-lang/elixir/blob/f4a378f158b00aae0f2ee1c211eccc4314ecec01/lib/ex_unit/lib/ex_unit/assertions.ex#L498 Questo significa che se passi semplicemente 'myFn (a, b)' sarà valutato e il valore sarà passato a 'assert_rise', che è già troppo tardi :) – tkowal