2012-06-27 2 views
9

클로저에서 다음을 수행하는 적절한 방법은 무엇입니까?심볼을 처리 할 수 ​​없습니다 : throw 되었습니까?

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

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

첫 번째 테스트 케이스는 정상적으로 실행되지만 전체 스 니펫은 "확인할 수 없습니다.

답변

17

is은 몸체에 심볼 thrown?을 찾아 테스트를 작성하는 매크로입니다. thrown?은 실제로 사용자가 호출 할 수있는 기능이 아닙니다.is의 기본 동작은 찾고 있지 않은 예외가 발생하면 테스트에 실패하므로 위의 예제에서 (not (thrown?을 제거하고 찾고있는 결과를 얻을 수 있습니다.

9

thrown?is 후 보여 주어야 특별한 주장이다, 그래서 당신은 다른 표현에 둥지 그것은, 매크로 is의 맥락에서, 그래서 기호를 이해하지 못할 두 번째 주장은 던져 수 없습니다?

당신은 그냥 말할 수 : 오류 0 :

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

를 예외가 (+ 2 3)에서 발생하는 경우, clojure.test 1보고 실패하고 스택 추적을 덤프.

또한 (throw Exception "stuff")이 잘못되었음을 유의하십시오. 예외 내부를 올바르게 구성해야합니다.

관련 문제