2012-06-27 18 views
9

¿Cuál es la forma correcta de hacer lo siguiente en clojure?No se puede resolver el símbolo: ¿lanzado?

(ns todo.test.models.task 
    (:use [clojure.test])) 

(deftest main-test 
    (is (thrown? Exception (throw Exception "stuff"))) 
    (is (not (thrown? Exception (+ 2 3)))) 
) 

Primer testcase funciona bien pero el fragmento entero devuelve "No se puede resolver el símbolo: ¿arrojado?"

Respuesta

17

is es una macro que busca el símbolo thrown? en sus pruebas de cuerpo y compilación. thrown? no es realmente una función a la que pueda llamar. El comportamiento predeterminado de is falla la prueba si se lanza una excepción que no se estaba buscando, por lo que puede eliminar el (not (thrown? del ejemplo anterior y obtener el resultado que está buscando.

9

thrown? es una afirmación especial que debe aparecer después de is, por lo que puede anidar en otras expresiones, por lo que en el contexto de la is macro, la segunda afirmación no va a entender el símbolo lanzado ?.

Se podía decir:

(deftest main-test 
    (is (thrown? Exception (throw (Exception. "stuff")))) 
    (is (= 5 (+ 2 3)))) 

Si se produce una excepción en (2 + 3), clojure.test informará 1: error y 0: fallar y volcar el seguimiento de la pila.

También tenga en cuenta que su (throw Exception "stuff") es incorrecto; necesita construir la excepción correctamente dentro del tiro.

Cuestiones relacionadas