我正在尝试运行预期会引发某些异常的测试。
throws?
可以正常工作,但是当我尝试thrown-with-msg?
时会抛出异常。为了测试它,我从documentation
代码:
(deftest check-exception
(testing "If Exception is thrown"
(is (thrown-with-msg? java.lang.ArithmeticException #\"Divide by zero\" (/ 1 0)))))
编译错误:
线程“主”中的异常clojure.lang.LispReader $ ReaderException:java.lang.RuntimeException:不支持的字符:\“ Divide
需要传递的第三个参数是Regular Expression
。我该如何通过?
答案 0 :(得分:2)
Clojure中的正则表达式的文字为\
。因此,您在此处使用的#"\"Divide by zero\""
是错误的。如果要在regexp文字中包含引号,则可以像对待引号一样对其进行引号。例如。 (is (thrown-with-msg? ArithmeticException #\"Divide by zero\"
(/ 1 0)))
编辑 :(从字面上看)混乱的根源
source code实际上在文档字符串中包含以下行:
"
但这是由于还需要在文档注释中引用doc
。用例如只看文档REPL中的user=> (require 'clojure.test)
user=> (doc clojure.test)
...
(is (thrown-with-msg? ArithmeticException #"Divide by zero"
(/ 1 0)))
...
// from an external C api
void f(int i, void (*g)());
const int n = ...
void a0(); void a1(); ...
void (*a[n])();
int main()
{
a[0] = a0; a[1] = a1; ...
for (int i = 0; i != n; ++i)
f(i, a[i]);
...
}
显示正确的代码。
答案 1 :(得分:0)
正则表达式如下:
(deftest check-exception
(testing "If Exception is thrown"
(is (thrown-with-msg? java.lang.ArithmeticException #"^.*Divide by zero.*$" (/ 1 0)))))