clojure - Clojure 单元测试问题
问题描述
我目前在我的主文件中有一个函数,它可以对列表中的每个数字进行平方,现在它可以完美地工作,没有错误,但是我的单元测试不断抛出错误,我似乎无法弄清楚为什么。
(ns squareone.core-test
(:require [clojure.test :refer :all]
[squareone.core :refer :all]))
(deftest Squaring
(testing "Squaring test"
(is (= [1 16] (square [1 4])))))
That is everything in my test file
这就是我的主文件中的内容减去实际的平方函数
(ns squareone.core)
(:require '[clojure.string :as string])
(require '['clojure.string :as 'str])
我得到这个错误
Syntax error (ClassCastException) compiling at
(C:\Users\public\squareone\src\squareone\core.clj:3:1).
class clojure.lang.PersistentList cannot be cast to class clojure.lang.Symbol
(clojure.lang.PersistentList and clojure.lang.Symbol are in unnamed module of loader 'app')
非常不确定如何进行,任何帮助表示赞赏:)
解决方案
语法错误在第 3 行,即:
(require '['clojure.string :as 'str])
我们可以在 REPL 中确认确实是非法的:
user=> (require '['clojure.string :as 'str])
Execution error (ClassCastException) at user/eval1 (REPL:1).
class clojure.lang.PersistentList cannot be cast to class clojure.lang.Named (clojure.lang.PersistentList and clojure.lang.Named are in unnamed module of loader 'app')
第 3 行也有问题,但不会导致语法或运行时错误:
(:require '[clojure.string :as string])
:require
这会尝试在文字向量中查找关键字[clojure.string :as string]
——前导引号 ( '
) 阻止评估,因此它是一个符号 ( clojure.string
),后跟一个关键字 ( :as
),后跟另一个符号 ( string
)。在向量中查找关键字:require
将返回nil
。
我希望您尝试做的是:
(ns squareone.core
(:require [clojure.string :as string]))
注意括号的位置::require
表格是ns
声明的一部分。
此时,您应该能够删除第 3 行并继续进行测试。
为什么第 3 行是非法的?
引号 ( '
) 是包装表单的简写,(quote ..)
这反过来又会阻止评估。您在第 3 行中有三个引号,因此它扩展为:
(require (quote [(quote clojure.string) :as (quote str)]))
外引号阻止评估,因此传递给require
函数的参数是:[(quote clojure.string) :as (quote str)]
它是一个向量,包含一个包含两个符号 ( quote
and clojure.string
) 的列表、一个关键字 ( :as
) 和另一个包含两个符号的列表。但require
希望这些插槽中只有一个符号,如下所示:
(require '[clojure.string :as str])
这就是你得到的错误: expected clojure.lang.Symbol
but got clojure.lang.PersistentList
。
推荐阅读
- typescript - 将 Bable Typescript 与 Angular Cli 一起使用
- dpdk - 在 DPDK 中使用中断
- reactjs - 301如何通过react js重定向到达路由器
- java - 我想做“如果一个人预订座位,可用座位必须贬值一个”。我怎样才能做到这一点?
- c - printf 在 scanf 之后不打印正确的值(例如 5 打印为 6618624)
- reactjs - 类组件中的 UseRef。画布未定义
- amazon-web-services - 如何创建 AWS 托管超级账本结构区块链的备份?
- android - 使用 MethodChanneel 检测 Flutter 上的电话
- bash - 逐行读取文件并分别对每一行求和
- kong - 我的自定义 SSL 证书不起作用#kong