如何解决导入单个库后测试中断
我正在使用clojure新的CLI创建一个项目并运行我所做的测试:
clojure -M:test:runner
这是我的考验
(ns auth.authorize-test
(:require [clojure.test :refer :all]
[auth.authorize :as auth]))
(deftest a-test
(testing "FIXME,I fail."
(is (= 0 0))))
;; this is working good and responding:
;; Ran 1 tests containing 1 assertions.
该项目将从stdin中读取。我的第一步是从文件中获取数据,然后将其写入标准输出以进行测试。因此,我想导入BufferedReader
来读取文件:
(ns auth.authorize-test
(:require [clojure.test :refer :all]
[auth.authorize :as auth])
;; I just added this line
(:import (java.io BufferedReader))
(deftest a-test
(testing "FIXME,I fail."
(is (= 0 0))))
;; This is not working and it's returning
;; Ran 0 tests containing 0 assertions.
所以现在不再进行任何测试。
解决方法
最可能的原因是您的代码中存在某种语法错误。
您的代码应为:
(ns auth.authorize-test
(:require [clojure.test :refer :all]
[auth.authorize :as auth])
;; I just added this line
(:import (java.io BufferedReader)))
请注意:三个)
在这里结束,而不是您的代码中出现的两个。
这就是我刚刚做的:
(! 734)-> clojure -X:new :name auth.authorize
Generating a project called auth.authorize based on the 'lib' template.
The lib template is intended for library projects,not applications.
(! 735)-> cd auth.authorize/
(! 736)-> vi test/auth/authorize_test.clj
# to change the test to (= 0 0)
(! 737)-> cat test/auth/authorize_test.clj
(ns auth.authorize-test
(:require [clojure.test :refer :all]
[auth.authorize :refer :all]))
(deftest a-test
(testing "FIXME,I fail."
(is (= 0 0))))
(! 738)-> clojure -M:test:runner
Running tests in #{"test"}
Testing auth.authorize-test
Ran 1 tests containing 1 assertions.
0 failures,0 errors.
(! 739)-> vi test/auth/authorize_test.clj
# add in the :import
(! 740)-> cat test/auth/authorize_test.clj
(ns auth.authorize-test
(:require [clojure.test :refer :all]
[auth.authorize :refer :all])
(:import (java.io BufferedReader)))
(deftest a-test
(testing "FIXME,I fail."
(is (= 0 0))))
(! 741)-> clojure -M:test:runner
Running tests in #{"test"}
Testing auth.authorize-test
Ran 1 tests containing 1 assertions.
0 failures,0 errors.
您会看到它可以正确运行测试。
,添加到Sean的答案中,这就是编译器看到的内容:
(ns auth.authorize-test
(:require [clojure.test :refer :all]
[auth.authorize :as auth])
(:import (java.io BufferedReader)) ; should terminate ns form here with another `)` char
; Due to missing `)` above,this whole `deftest` form is inside the 'ns' form
; and is ignored w/o an error msg (you could consider this a compiler defect)
(deftest a-test
(testing "FIXME,I fail."
(is (= 0 0))))
) ; end of ns form - should be after `import` keyword
因此,您发现)
行上缺少的:import
是导致问题的原因。它导致deftest
格式位于ns
格式的内部,这没有任何意义,并且是语法错误。我很惊讶编译器对此没有错误,我将其视为编译器错误/缺陷/问题,因为它只是默默地失败,而不是打印某种错误消息。
更新
也许您使用的是Clojure的旧版本?我只是用此配置尝试过:
--------------------------------------
Clojure 1.10.2-alpha1 Java 15
--------------------------------------
我得到一个错误:
Syntax error macroexpanding clojure.core/ns at (tst/demo/core.clj:1:1).
deftest - failed: #{:refer-clojure} at: [:ns-clauses :refer-clojure :clause] spec: :clojure.core.specs.alpha/ns-refer-clojure
deftest - failed: #{:require} at: [:ns-clauses :require :clause] spec: :clojure.core.specs.alpha/ns-require
deftest - failed: #{:import} at: [:ns-clauses :import :clause] spec: :clojure.core.specs.alpha/ns-import
deftest - failed: #{:use} at: [:ns-clauses :use :clause] spec: :clojure.core.specs.alpha/ns-use
deftest - failed: #{:refer} at: [:ns-clauses :refer :clause] spec: :clojure.core.specs.alpha/ns-refer
deftest - failed: #{:load} at: [:ns-clauses :load :clause] spec: :clojure.core.specs.alpha/ns-load
deftest - failed: #{:gen-class} at: [:ns-clauses :gen-class :clause] spec: :clojure.core.specs.alpha/ns-gen-class
Full report at:
/tmp/clojure-8770599721946785921.edn
Tests failed.
和/tmp/clojure.....edn
文件如下:
{:clojure.main/message
"Syntax error macroexpanding clojure.core/ns at (tst/demo/core.clj:1:1).\ndeftest - failed: #{:refer-clojure} at: [:ns-clauses :refer-clojure :clause] spec: :clojure.core.specs.alpha/ns-refer-clojure\ndeftest - failed: #{:require} at: [:ns-clauses :require :clause] spec: :clojure.core.specs.alpha/ns-require\ndeftest - failed: #{:import} at: [:ns-clauses :import :clause] spec: :clojure.core.specs.alpha/ns-import\ndeftest - failed: #{:use} at: [:ns-clauses :use :clause] spec: :clojure.core.specs.alpha/ns-use\ndeftest - failed: #{:refer} at: [:ns-clauses :refer :clause] spec: :clojure.core.specs.alpha/ns-refer\ndeftest - failed: #{:load} at: [:ns-clauses :load :clause] spec: :clojure.core.specs.alpha/ns-load\ndeftest - failed: #{:gen-class} at: [:ns-clauses :gen-class :clause] spec: :clojure.core.specs.alpha/ns-gen-class\n",:clojure.main/triage
{:clojure.error/cause
"Call to clojure.core/ns did not conform to spec.",:clojure.error/phase :macro-syntax-check,:clojure.error/symbol clojure.core/ns,:clojure.error/column 1,:clojure.error/line 1,:clojure.error/class clojure.lang.ExceptionInfo,:clojure.error/source "core.clj",:clojure.error/spec
{:clojure.spec.alpha/problems
({:path [:ns-clauses :refer-clojure :clause],:pred #{:refer-clojure},:val deftest,:via
[:clojure.core.specs.alpha/ns-form
:clojure.core.specs.alpha/ns-refer-clojure
:clojure.core.specs.alpha/ns-refer-clojure],:in [3 0]}
{:path [:ns-clauses :require :clause],:pred #{:require},:via
[:clojure.core.specs.alpha/ns-form
:clojure.core.specs.alpha/ns-require
:clojure.core.specs.alpha/ns-require],:in [3 0]}
{:path [:ns-clauses :import :clause],:pred #{:import},:via
[:clojure.core.specs.alpha/ns-form
:clojure.core.specs.alpha/ns-import
:clojure.core.specs.alpha/ns-import],:in [3 0]}
....
因此,看来Clojure的当前版本(使用clojure.spec检查ns表单)确实检测到代码中的错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。