int*_*tar 5 unit-testing clojure
这对我有用:
(is (thrown? AbstractMethodError (.fun obj 1) ))
Run Code Online (Sandbox Code Playgroud)
但这却炸了
(is (not (thrown? AbstractMethodError (.fun obj 1) )))
Run Code Online (Sandbox Code Playgroud)
出现以下错误:
java.lang.RuntimeException: Unable to resolve symbol: thrown? in this context
Run Code Online (Sandbox Code Playgroud)
大概是“扔了”?“是”里面有一些特殊的含义,当我把“不是”放在中间时,它就不可见了。
那么我如何测试像抛出这样的断言的否定呢?
你是对的,thrown?是一个特殊的断言,必须出现在is. 如果您想测试是否未引发异常(换句话说,调用计算结果),您可能需要执行以下操作:
(is (.fun obj 1))
尽管这有一个问题:如果结果为 false(false,nil),它就会失败。完全确定的是:
(let [r (.fun obj 1)]
(is (= r r)))
Run Code Online (Sandbox Code Playgroud)
(这是一个同义反复,只有在抛出异常时才会失败)。